使用 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 设置

  1. 在浏览器中打开 。
  2. 按向导操作:
    • 确认数据目录(映射到 ./data)。
    • 选择数据库(内部 DB 适用于测试)。
    • 接受许可协议。
    • 创建初始管理员账户。

授权代理

  1. 在 TeamCity UI 中进入 Agents → Unauthorized
  2. 为你的代理点击 Authorize

此时代理应显示为 ConnectedCompatible

在代理内部验证 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 中:

  1. 添加一个 Docker build step
  2. 设置 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 守护进程构建镜像。
  • 数据和日志在重启之间保持持久化;该设置可以通过添加更多代理进行扩展。
  • 适用于测试、开发以及小型生产环境。
Back to Blog

相关文章

阅读更多 »