Я новичок в CI и TeamCity.
Я запустил сервер и агент TeamCity с Docker, используя docker-compose.
version: "3.7"
services:
server:
image: jetbrains/teamcity-server:latest
ports:
- "8111:8111"
volumes:
- C:\TeamCity\server\data:/data/teamcity_server/datadir
- C:\TeamCity\server\logs:/opt/teamcity/logs
agent:
image: jetbrains/teamcity-agent:latest
environment:
- SERVER_URL=http://server:8111
volumes:
- C:\TeamCity\agent\conf:/data/teamcity_agent/conf
- C:\TeamCity\agent\logs:/opt/buildagent/logs
- /var/run/docker.sock:/var/run/docker.sock
Я настроил сервер TeamCity на выполнение некоторых шагов сборки, в том числе шаг сборки, который помещает образ Docker в Реестр контейнеров Azure.
Когда конвейер запускается, агент пытается подключиться к реестру (подключение работает на стороне сервера), но я получаю эту ошибку:
Cannot login to registry xxx.azurecr.io
An error occurred while executing 'docker login -u "TeamCity" --password-stdin xxx.azurecr.io':
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/auth": dial unix /var/run/docker.sock: connect: permission denied
Читая в Интернете, в том числе подобные вопросы SO, я обнаружил, что проблема, похоже, заключается в том, что агент не находится в группе docker
.
Я работаю в Windows, и все ответы, включая официальное руководство TeamCity, делают примеры для Linux. В любом случае, я старался изо всех сил.
Я зашел в докер агента с docker exec -it teamcity-agent-1 /bin/bash
и вроде бы уже в группе docker
. cat etc/group
--> docker:x:999:buildagent
Вот ТАК вопрос с этим решением.
Я также пытался добавить teamcity.docker.use.sudo=true
в файл конфигурации агента, как предлагает официальное руководство, но тогда сервер не распознает агент как подходящий агент с установленным Docker.
Какие-либо предложения?
Я исправил проблему, добавив user: root
в свой docker-compose.yaml
, как было предложено в этой теме