如何在Jenkins流水线中使用DIND镜像传递不安全注册表参数
在Jenkins DIND容器中配置不安全注册表的几种方法
我来帮你解决这个问题,其实在docker:dind容器里设置不安全注册表有几种很直接的方式,下面我一个个给你说明:
方法1:直接通过DIND启动参数传递(最推荐)
docker:dind镜像本身支持直接在启动时通过--insecure-registry参数指定不安全注册表,你只需要在Jenkins pipeline的agent args里加上这个参数就行,不需要额外的配置文件。
修改后的pipeline代码如下:
pipeline { agent {label 'jenkins-docker-slave'} stages{ stage('maven version'){ agent {docker { image 'maven:latest'}} steps{ script{ sh "mvn --version" } } } stage('docker build'){ agent { docker { image 'docker:dind' args '-v /var/run/docker.sock:/var/run/docker.sock --insecure-registry ec2-52-39-183-6.us-west-2.compute.amazonaws.com:8123' } } steps{ script{ sh 'docker version' // 现在你可以正常执行docker login和push命令了 sh 'docker login ec2-52-39-183-6.us-west-2.compute.amazonaws.com:8123 -u your-username -p your-password' sh 'docker push your-image:tag' } } } } }
这个方法的好处是不需要额外准备配置文件,所有配置都在pipeline里完成,非常直观且可靠。
方法2:挂载自定义的daemon.json配置文件
如果你需要更复杂的Docker daemon配置(比如多个不安全注册表、镜像加速等),可以提前在Jenkins slave节点上创建好daemon.json文件,然后挂载到DIND容器的/etc/docker/daemon.json路径。
- 先在你的Jenkins slave节点上创建
daemon.json文件,内容如下:
{ "insecure-registries": [ "ec2-52-39-183-6.us-west-2.compute.amazonaws.com:8123" ] }
假设文件路径是/opt/docker-config/daemon.json。
- 修改pipeline里的agent args,添加挂载命令:
agent { docker { image 'docker:dind' args '-v /var/run/docker.sock:/var/run/docker.sock -v /opt/docker-config/daemon.json:/etc/docker/daemon.json' } }
DIND容器启动时会自动读取这个配置文件,直接生效不安全注册表设置。
方法3:在容器内动态配置(不推荐)
如果上面两种方法都不适用,你也可以在DIND容器启动后,手动创建daemon.json并重启Docker服务,但这种方法需要容器内有足够的权限,而且重启服务可能会有延迟,稳定性不如前两种:
stage('docker build'){ agent { docker { image 'docker:dind' args '-v /var/run/docker.sock:/var/run/docker.sock' } } steps{ script{ // 创建daemon.json配置文件 sh 'echo \'{ "insecure-registries": [ "ec2-52-39-183-6.us-west-2.compute.amazonaws.com:8123" ] }\' > /etc/docker/daemon.json' // 重启Docker服务使配置生效 sh 'service docker restart' // 等待服务重启完成 sh 'sleep 5' // 执行后续Docker命令 sh 'docker version' sh 'docker login ...' } } }
内容的提问来源于stack exchange,提问作者Arvindgpt88
相关产品推荐
相关产品推荐

