使用 Docker Compose 运行具备 Docker 能力的 TeamCity 代理
发布: (2025年12月18日 GMT+8 17:00)
4 min read
原文: Dev.to
Source: Dev.to
前置条件
- 已安装并运行 Docker
- 已安装 Docker Compose
- 具备在主机上运行 Docker 命令的足够权限
- 终端/命令行界面
目录结构
mkdir -p teamcity/{data,logs,agent}
cd teamcity
你的目录应如下所示:
teamcity/
├── docker-compose.yml
├── data/ # 服务器持久化数据
├── logs/ # TeamCity 日志
└── agent/ # 代理配置
docker-compose.yml
version: "3.8"
services:
teamcity-server:
image: jetbrains/teamcity-server:2023.11.4
container_name: teamcity-server
ports:
- "8111:8111"
volumes:
- ./data:/data/teamcity_server/datadir
- ./logs:/opt/teamcity/logs
restart: unless-stopped
teamcity-agent:
image: jetbrains/teamcity-agent:2023.11.4
container_name: teamcity-agent
user: root
environment:
- SERVER_URL=http://teamcity-server:8111
volumes:
- ./agent:/data/teamcity_agent/conf
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- teamcity-server
restart: unless-stopped
说明
-
服务器卷
./data用于存放 TeamCity 服务器数据和构建历史。./logs用于在容器重启后保持服务器日志持久化。
-
代理设置
- 以
root身份运行,以获得使用主机 Docker 套接字的权限。 - 挂载
/var/run/docker.sock使代理能够访问主机 Docker 守护进程。 SERVER_URL指向服务器地址。
- 以
启动整个堆栈
docker compose up -d
-d让容器在后台运行。- 服务器将在 . 可访问。
- 代理容器会自动尝试连接到服务器。
初始 Web 设置
- 在浏览器中打开 。
- 按向导操作:
- 确认数据目录(映射到
./data)。 - 选择数据库(内部 DB 适用于测试)。
- 接受许可协议。
- 创建初始管理员账户。
- 确认数据目录(映射到
授权代理
- 在 TeamCity UI 中进入 Agents → Unauthorized。
- 为你的代理点击 Authorize。
此时代理应显示为 Connected 且 Compatible。
在代理内部验证 Docker 访问
docker exec -it teamcity-agent docker version
你应该能看到 Docker 客户端和服务器的版本信息,表明代理可以构建 Docker 镜像。
构建 Docker 镜像
你可以使用命令行或 Docker runner 构建步骤,例如:
docker build -t my-app:%build.number% .
docker push my-app:%build.number%
在 UI 中:
- 添加一个 Docker build step。
- 设置 Dockerfile 路径和镜像名称。
TeamCity 将使用代理的 Docker 访问权限来构建并推送镜像。
最佳实践
- 将
/data文件夹放在快速且持久的存储上。 - 定期备份 TeamCity 服务器数据。
- 限制对 TeamCity 服务器和 Docker 套接字的访问;以
root运行代理相当于对主机 Docker 拥有完整控制权。 - 在生产环境中,考虑使用 Docker‑in‑Docker 设置或远程 Docker 主机以获得更好的隔离。
停止与重启
docker compose down # 停止
docker compose up -d # 启动(代理会自动重新连接)
小结
- 在 Docker 中运行的完整功能 TeamCity 服务器。
- 具备 Docker 能力的 TeamCity 代理可以使用主机 Docker 守护进程构建镜像。
- 数据和日志在重启之间保持持久化;该设置可以通过添加更多代理进行扩展。
- 适用于测试、开发以及小型生产环境。