Tailscaleは、簡単かつセキュアにプライベートVPNネットワークを構築できる人気のツールです。
通常は物理端末や仮想マシンに導入して使いますが、Docker環境でもTailscaleを活用することが可能です。
この記事では、Dockerコンテナ上でTailscaleを動作させる方法や、他のコンテナと連携するためのネットワーク設定のポイントをわかりやすく解説します。
「Tailscaleでリモートからコンテナにアクセスしたい」「Exit Nodeを軽量に構築したい」といったニーズに応える内容となっており、DockerユーザーにもVPNを活用した柔軟なネットワーク構成が実現できます。
TailscaleをDockerで使う2つのパターン
Tailscaleは通常、ホストOSにインストールして使うことが多いですが、Docker環境に導入することで、より柔軟で隔離されたVPN活用が可能になります。
TailscaleをDockerで使うには、以下の2つの主要な構成パターンがあります。
| 項目 | パターン1 単体のTailscaleコンテナとして起動 |
パターン2 アプリコンテナにTailscaleを組み込み |
|---|---|---|
| 概要 | Tailscale専用のコンテナを立ててVPN接続を中継 | アプリコンテナ内にTailscaleを組み込む |
| 起動のしやすさ | ◎(公式イメージあり、コマンド1行) | △(Dockerfile作成とマルチプロセス対応が必要) |
| 他コンテナとの連携 | ◎(--network container:で共有可能) |
△(単体アプリ用途に最適) |
| セキュリティ分離 | ◎(VPNとアプリを別々に管理可能) | △(VPNとアプリが同一コンテナ内) |
| 再利用性 | ◎(1つのTailscaleで複数アプリに共有可) | △(アプリごとに個別導入が必要) |
| Exit Node構成 | ◎(軽量VPNゲートウェイとして最適) | △(Exit Node化には工夫が必要) |
| ホスト改変なし | ◎(ホストを汚さず導入可能) | ◎(同じくコンテナ完結) |
| 主な用途 | – Exit Node構築 – 他コンテナの中継 – リモートVPNゲートウェイ |
– Tailscale経由でWebアプリやAPIを直接提供 – シンプルなVPN付きツール化 |
パターン1:単体のTailscaleコンテナとして起動
「Tailscaleだけをコンテナで動かす」という構成は、次のような用途に最適です。
-
軽量なVPNゲートウェイ(Exit Node)をDockerで構築したい
-
ホストにTailscaleを直接インストールせずに、ネットワーク機能を利用したい
-
他のアプリコンテナとネットワークを共有し、安全なリモート接続をしたい
以下に、実際のコマンドと必要な設定ポイントを詳しく解説します。
必要な条件
-
Linuxホスト(※
--network hostはLinux限定) -
Dockerがインストールされていること
-
/dev/net/tunが有効(TUNデバイスを使用)
ステップ1:Tailscaleコンテナを起動
以下の docker run コマンドで、Tailscale専用コンテナをバックグラウンド起動します。
| オプション | 意味 |
|---|---|
--cap-add=NET_ADMIN |
ネットワーク構成を変更する権限(VPNで必須) |
--network host |
ホストのネットワークをそのまま使う |
--device /dev/net/tun |
Tailscaleが必要とする仮想ネットワークデバイス |
-v /var/lib/tailscale |
状態・ログイン情報を永続化(再起動してもログイン状態維持) |
tailscaled |
バックグラウンドでTailscaleデーモンを実行 |
ステップ2:Tailscaleネットワークに参加(認証)
コンテナ起動後、以下のコマンドで Tailscale にログインします。
実行すると、CLI にログイン用のURLが表示されるので、Webブラウザで開いてGoogleやGitHubアカウントで認証します。
ログインが完了すれば、このコンテナが Tailscale ネットワークの1台として参加します。
ステップ3:接続確認
コンテナ内で IP を確認
他の端末から ping <Tailscale IP> を実行すれば、接続が確認できます。
また、必要に応じてこのコンテナと他のアプリケーションコンテナをネットワーク共有することも可能です(--network container:tailscale)。
ステップ4(任意):Exit Nodeとして構成する
このTailscaleコンテナを Exit Node(インターネット出口) にしたい場合は、次のコマンドを実行します。
他のTailscale端末からこのノードを選択すれば、VPNのように使えます。
パターン2:アプリコンテナにTailscaleを組み込み
アプリとTailscaleを1つのDockerコンテナにまとめる構成は、VPNを通じて限定公開したいアプリケーションに最適です。
たとえば、社内用のWebサービスや個人ツール、APIサーバーなどをTailscale経由のみでセキュアに公開したい場合に、軽量かつ構成がシンプルなこの方法が有効です。
この構成の特徴
-
1つのコンテナだけでアプリ+VPNが完結
-
外部公開せず、Tailscaleネットワーク内からのみアクセス可能
-
VPSやエッジデバイス、開発用サーバーにも最適
-
公開用ポートを開けずに安全にサービス運用が可能
実装例:Tailscale + nginxを統合したDockerfile
以下は、nginxをTailscale越しに提供するシンプルな構成例です。
# 基本パッケージのインストール
RUN apt update && \
apt install -y curl iproute2 iptables nginx gnupg2 lsb-release
# Tailscaleインストール
RUN curl -fsSL https://tailscale.com/install.sh | sh
# デーモン起動用スクリプト
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
EXPOSE 80
CMD [“/entrypoint.sh”]
entrypoint.sh(Tailscaleとnginxを同時起動)
# Tailscaled 起動(バックグラウンド)
tailscaled &
# 認証済みの場合はスキップ、未ログインならログイン(手動 or プリオーセンティケートキー)
tailscale up –authkey=${TAILSCALE_AUTHKEY:-} –hostname=my-nginx
# nginx起動
nginx -g “daemon off;”
docker run 実行例(TAILSCALE_AUTHKEYを使う)
–cap-add=NET_ADMIN \
–cap-add=NET_RAW \
–device /dev/net/tun \
-e TAILSCALE_AUTHKEY=tskey-xxxxxxxxxxxxxxxx \
-p 80:80 \
my-nginx-tailscale
※ 認証キー(authkey)は Tailscale 管理画面の「Keys」セクションから取得可能。権限付き・有効期限付きで発行できます。
主な用途
| 利用シーン | 解説 |
|---|---|
| 社内ツールのVPN限定公開 | 開発環境や管理ツールをTailscale内だけでアクセス可能にする |
| IoT・ラズパイ用途 | 公開不要なWebUIやAPIを安全にVPN経由で接続 |
| 単一アプリでVPN込みの再配布 | 他人に配布しても勝手にVPN付きで動作するアプリを作れる |
| フルリモート開発 | 外出先からVPN経由で自分のアプリに接続できる構成を簡単に構築可能 |
注意点とコツ
| 注意点 | 対処法 |
|---|---|
| コンテナ内で複数プロセスを動かす必要がある | entrypoint.sh や supervisord で制御 |
| TUN デバイスが必要 | --device /dev/net/tun を指定(Linuxホスト限定) |
| 認証が手動だと不便 | TAILSCALE_AUTHKEY を使えば自動ログイン可能 |
| コンテナ削除で状態が消える | -v /var/lib/tailscale をマウントして永続化可能 |
まとめ
Docker上でTailscaleを動かすことで、柔軟かつセキュアなネットワーク構成が可能になります。特に次のような場面で非常に便利です:
-
軽量なVPN Gateway(Exit Node)をコンテナ化したい
-
ホストに影響を与えずTailscaleを試したい
-
コンテナ単位でリモートアクセスを制御したい
Tailscale × Docker は開発環境から本番運用まで幅広く活用できる組み合わせです。ぜひ構築して、その便利さを体感してみてください。





–name tailscale \
–cap-add=NET_ADMIN \
–cap-add=NET_RAW \
–network host \
–device /dev/net/tun \
-v /var/lib/tailscale:/var/lib/tailscale \
tailscale/tailscale \
tailscaled