本文介绍如何在 Linux 主机上通过 Docker Compose 部署 Tailscale 客户端,并结合 OAuth 凭据与标签(Tag)完成节点自动注册和权限管理。
1. 适用场景
– 需要将服务器或容器节点快速接入 Tailnet
– 希望通过 Tag 对节点进行分组和策略控制
– 希望使用 OAuth Client Secret 实现自动化部署
2. 前置条件
– 已安装 Docker 与 Docker Compose
– 宿主机支持 TUN 设备(/dev/net/tun)
– 具备 Tailscale 管理后台操作权限
– 已规划节点名称与目标标签(例如 tag:develop)
3. 在后台创建 OAuth 凭据
在 Tailscale 管理后台的 Trust Credentials 中创建 OAuth 凭据。


权限范围建议按最小权限原则选择,当前场景可使用 read。

创建完成后请立即保存 Client Secret,后续将用于容器环境变量 TS_AUTHKEY。

4. 配置 Tag 与访问控制
在 Access Controls 中创建部署使用的标签(例如 tag:develop),并确保 ACL/TagOwners 策略允许该节点声明对应标签。


5. Docker Compose 配置
示例配置如下:
services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale
network_mode: host
restart: unless-stopped
volumes:
- /dev/net/tun:/dev/net/tun
- ./tailscale-sock:/var/run/tailscale
- ./tailscale-state:/var/lib/tailscale
cap_add:
- net_admin
- sys_module
environment:
- TS_AUTHKEY=tskey-client-xxxxxx?ephemeral=false&preauthorized=true
- TS_EXTRA_ARGS=--advertise-tags=tag:develop --netfilter-mode=off
- TS_HOSTNAME=xxxx-domain
- TS_NO_LOGS_NO_SUPPORT=true
- TS_USERSPACE=false
- TS_STATE_DIR=/var/lib/tailscale
- TS_SOCKET=/var/run/tailscale/tailscaled.sock
6. 启动与验证
在 compose 文件所在目录执行:
docker compose up -d
docker compose ps
docker logs -f tailscale
验证节点是否成功入网:
docker exec tailscale tailscale status
docker exec tailscale tailscale ip
若返回 100.x 地址且状态正常,说明部署成功。
7. 关键参数说明
– TS_AUTHKEY: OAuth Client Secret 或可用的 Auth Key,用于首次注册
– TS_EXTRA_ARGS: 传递给 tailscale up 的参数,示例中包含 Tag 声明与 netfilter 配置
– TS_HOSTNAME: 节点在 Tailnet 中显示的主机名
– TS_USERSPACE=false: 使用内核网络栈,依赖 /dev/net/tun
– TS_STATE_DIR: 本地状态持久化目录,避免容器重建后重复登录
– TS_SOCKET: tailscaled 控制套接字路径