Jenkins Docker云代理模板无法识别标签‘dockerhub-ubuntu’问题
问题原因及解决方案
核心原因
你的Docker代理模板无法工作,本质是两种Docker代理机制的实现逻辑不同:
- 你配置的
Docker Agent模板依赖Docker Plugin,默认通过SSH连接容器来创建Jenkins代理节点,但ubuntu:latest镜像默认没有安装、启动SSH服务,Jenkins无法成功连接到创建的容器,导致该模板对应的dockerhub-ubuntu标签没有可用节点,任务调度时报错。 - 第二种Jenkinsfile使用的是Docker Pipeline插件的
docker { image }语法,它不需要SSH,直接通过Docker API在容器内执行流水线步骤,因此能正常运行。
解决方案
方案1:修改代理模板的启动方式(推荐)
不需要依赖SSH,改用Docker Pipeline的方式启动代理:
- 进入Jenkins的「Manage Jenkins -> Clouds -> Docker -> Docker Agent templates」配置页面
- 找到「Launch method」,选择**「Launch agent via execution of command inside container」**
- 在「Command to run」中填入:
java -jar /usr/share/jenkins/agent.jar - 同时修改镜像为官方Jenkins代理镜像
jenkins/agent:latest(该镜像自带Jenkins代理程序,无需额外配置) - 保存配置后,重新运行流水线即可识别
dockerhub-ubuntu标签。
方案2:自定义带SSH服务的Ubuntu镜像
如果必须使用Ubuntu基础镜像,需要自定义镜像安装SSH服务:
- 创建
Dockerfile:
FROM ubuntu:latest RUN apt-get update && apt-get install -y openssh-server openjdk-11-jre-headless RUN useradd -m jenkins && echo "jenkins:jenkins" | chpasswd RUN mkdir /var/run/sshd && chmod 0755 /var/run/sshd # 允许密码登录(生产环境建议用密钥) RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config RUN sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
- 构建镜像:
docker build -t ubuntu-ssh:latest .
- 在Docker Agent模板中,将镜像改为
ubuntu-ssh:latest,并在「Credentials」中配置Jenkins用户的登录密码(或密钥),保存后重新运行流水线。
方案3:检查Docker Cloud的基础配置
确保Docker Cloud能正常连接本地Docker服务:
- 在Docker Cloud配置页面,填写
Docker Host URI为unix:///var/run/docker.sock(本地部署场景) - 执行命令将Jenkins用户加入docker组,确保权限:
sudo usermod -aG docker jenkins sudo systemctl restart jenkins
内容的提问来源于stack exchange,提问作者Irbis
相关产品推荐
相关产品推荐

