将 docker 图像推送到未经授权的私有注册表时,Jenkins 管道中没有此类主机错误

No such host error in Jenkins pipeline when pushing docker image to unauthorized private registry

我试图在未配置任何身份验证的情况下将 docker 图像推送到私有注册表。以下是 jenkinsfile 阶段的样子。

在部署阶段没有 writeFile 命令,我没有得到这样的主机错误

docker push <private-vm-name>:5000/temp/prototype-be:v1
The push refers to repository [<private-vm-name>:5000/temp/prototype-be]
Get https://<private-vm-name>:5000/v2/: dial tcp: lookup <private-vm-name> on 127.0.0.11:53: no such host

使用 writeFile 命令我得到一个 AccessDenied 异常

java.nio.file.AccessDeniedException: /etc/docker

有人可以指导我如何解决这些错误以推送到私有 docker 注册表吗?

谢谢。

Jenkinsfile 阶段

        stage('Building docker image') {
            steps{
                script {
                    dockerImage = docker.build registry + ":v1"
                }
            }
        }

        stage('Pushing docker image') {
            steps{
                script {
                    writeFile file:"/etc/docker/daemon.json", text: "{
                            "insecure-registries": [
                               "<private-vm-name>:5000"
                            ]
                      }"
                    docker.withRegistry( 'http://<private-vm-name>:5000') {
                        dockerImage.push()
                    }
                }
            }
        }

作为解决方法,我使用 --insecure-registries 标志执行了 jenkins-server dind docker 图像。由于 jenkins 生成的 docker 容器现在知道私有 docker 注册表,因此上述 docker 推送命令有效。请注意,我还更改了 jenkins push 命令以使用服务器的 ip 地址而不是主机名,这样我就不需要编辑 /etc/hosts.