🐳
docker composeでtailscaleを利用する
試した環境
- Windows 11
- Docker Desktop v4.34
- Docker Compose v2.29.2-desktop.2
1. compose.ymlを書く
先に完成形を載せます。
services:
app:
build:
context: .
dockerfile: Dockerfile
networks:
internal_network:
ipv4_address: 192.168.47.10
external_network:
redis:
restart: unless-stopped
image: redis:7-alpine
networks:
internal_network:
ipv4_address: 192.168.47.11
db:
restart: unless-stopped
image: postgres:15-alpine
networks:
internal_network:
ipv4_address: 192.168.47.12
tailscale:
image: tailscale/tailscale:stable
hostname: tailscale
networks:
internal_network:
external_network:
environment:
- TS_AUTHKEY=xxxxxx
- TS_STATE_DIR=/var/lib/tailscale
- TS_USERSPACE=false
- TS_ROUTES=192.168.47.0/24
- TS_EXTRA_ARGS=--accept-routes
volumes:
- tailscale-data:/var/lib/tailscale
- /dev/net/tun:/dev/net/tun
cap_add:
- net_admin
- sys_module
restart: unless-stopped
volumes:
tailscale-data:
networks:
internal_network:
internal: true
ipam:
driver: default
config:
- subnet: 192.168.47.0/24
external_network:
1-1. tailscaleのserviceを追加する
以下の記事を参考にtailscaleのサービスを書いた。
TS_AUTHKEY(tskey-auth-~~~)の値は、tailscaleのログインページから「Add Device」を押して生成。
面倒くさいからTagとかは付けなかった。
1-2. DockerCompose内のネットワーク(internal_network)に固定IPを割り当てるを割り当てる
tailscaleのSubnetRouter機能(tailscaleホスト内と同じネットワークにある他のホストにもアクセスできる機能)を利用するので、サブネットを定義して各serviceに固定IPを割り振る。
2. tailscaleのSubnetRouter機能の設定
docker composeを起動すると、tailscaleのログインページに「tailscale」というマシンが追加されてるので、そのサブネットを有効にする。
Discussion