问题:
我将 Azure DevOps 与容器代理一起使用,并且我希望代理即使在构建管道完成后也保持空闲并持续运行。但是,一旦管道完成,代理容器就会退出。
我将以下命令添加到 Dockerfile 的末尾以保持容器运行:
CMD ["tail", "-f", "/dev/null"]
这是我完整的 Dockerfile:
Dockerfile
`# Base image
RUN apk update && apk upgrade
# Installing OpenJDK 11, Node.js, and other required packages
RUN apk add --no-cache bash curl git icu-libs jq openjdk17-jre nodejs npm
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk
ENV PATH="$JAVA_HOME/bin:$PATH"
# Verify Java and Node.js installations
RUN java -version && node -v && npm -v
WORKDIR /azp/
COPY ./start.sh ./
RUN chmod +x ./start.sh
RUN adduser -D agent
RUN chown agent ./
USER agent
# Another option is to run the agent as root.
# ENV AGENT_ALLOW_RUNASROOT="true"
ENTRYPOINT [ "./start.sh" ]
CMD ["tail", "-f", "/dev/null"]
`
尽管如此,代理容器在管道完成后仍然退出。我尝试过以分离模式、使用 tail 命令和交互模式运行容器,但这些方法都不起作用。
我错过了什么?如何确保容器代理在管道完成后保持空闲并且不退出?
按照官方文档在 Docker 中运行自托管代理,代理工作没有任何问题。分享以下步骤供大家参考。
按照创建并构建 Dockerfile 中的步骤 1 到 5 进行操作,并使用其中的
azp-agent-linux.dockerfile
和 start.sh
。
使用
docker build --tag "azp-agent:linux" --file "./azp-agent-linux.dockerfile" .
构建图像
使用
-d
选项运行容器。容器将以分离模式运行并在后台保持运行。代理将保持在线并在工作到来时处理工作。
docker run -d -e AZP_URL="<Azure DevOps instance>" -e AZP_TOKEN="<Personal Access Token>" -e AZP_POOL="<Agent Pool Name>" -e AZP_AGENT_NAME="Docker Agent - Linux" --name "azp-agent-linux" azp-agent:linux
触发一些构建并通过
docker logs azp-agent-linux
检查日志