🐳

docker composeでtailscaleを利用する

2024/11/12に公開

試した環境

  • 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のサービスを書いた。
https://tailscale.com/kb/1282/docker#code-examples

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