我需要在 azure devops 构建管道中运行 docker 命令,例如“docker build”和“docker Push”。我知道有一些任务可以执行这些操作,例如 imagebuildingInfo@1 等。但问题是我需要为每个管道运行的新 ACR 执行此操作,并且 imagebuildingInfo@1 任务需要 dockerregistry 类型的服务连接而不是 azure rm 。因此,我必须为管道的每次运行创建一个新的服务主体,但我做不到。
有没有办法在管道中的脚本中运行 docker 命令?我正在尝试这个
- task: AzureCLI@2
# displayName: Registry Login
# name: acrLogin
# env:
# ADME_SUBSCRIPTION: 'id'
# REGISTRY: 'acr name'
# inputs:
# azureSubscription: 'azure rm service principal'
# scriptType: 'bash'
# scriptLocation: 'inlineScript'
# inlineScript: |
# az acr login -n ${REGISTRY}
但是在运行时我收到错误:
WARNING: You may want to use 'az acr login -n <acr_name> --expose-token' to get an access token, which does not require Docker to be installed.
ERROR: 2024-03-20 10:22:28.619871 An error occurred: DOCKER_COMMAND_ERROR
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
这意味着 docker deamon 没有在代理上运行。我们必须使用一个模板,这可能会导致它无法运行。有没有办法在管道中显式运行 docker Deamon?
如果您使用的是自行安装代理的自托管代理池,并且需要直接在其他任务中运行
docker
命令,这些是我如何解决自托管代理池问题的命令以及虚拟机上的代理用户:
# Install Docker (https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository)
# Add Docker's official GPG key
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# Install the Docker packages
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Set Docker permissions
sudo chmod 666 /var/run/docker.sock
# Add agent user to the Docker group
sudo usermod -aG docker <agent-user-here>
# Restart docker
sudo systemctl restart docker
我希望这有帮助,祝你好运!