我是CI / CD的新手,我正在与CircleCI一起尝试在DockerHub上构建和推送我的应用程序。
我在互联网上研究了一些东西,并尝试了一些东西,但没有成功。
我遇到错误:
#!/bin/bash -eo pipefail
sudo docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
sudo docker tag $HUB_NAME $DOCKER_LOGIN/$HUB_NAME
sudo docker push $DOCKER_LOGIN/$HUB_NAMEr
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Exited with code 1
我遇到麻烦的config-yml:
# run tests!
- run: mvn integration-test
- setup_remote_docker
- run:
name: Build and deploy docker images
command: |
docker build -t $HUB_NAME:latest .
- deploy:
name: Push application Docker image
command: |
sudo docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
sudo docker tag $HUB_NAME $DOCKER_LOGIN/$HUB_NAME
sudo docker push $DOCKER_LOGIN/$HUB_NAME
答案 0 :(得分:0)
在我看来,您不应该在sudo docker
,login
和tag
命令中使用push
。
只需使用docker login
,docker tag
和docker push
而不使用sudo
,您应该会很好。
您在配置中使用 的setup_remote_docker
步骤的重点是设置环境变量,该变量允许docker命令使用当前变量访问远程docker环境。 docker用户。
在管道输出中,如果打开带有标签Setup a remote Docker engine
的步骤,则可能会看到类似以下的输出:
Allocating a remote Docker Engine
[ ... skip some output ...]
Remote Docker engine created. Using VM '...'
Created container accessible with:
DOCKER_CERT_PATH=/tmp/docker-certs(...)
DOCKER_HOST=tcp://XXX.XXX.XXX.XXX:YYYY
DOCKER_MACHINE_NAME=ZZZZ
DOCKER_TLS_VERIFY=1
NO_PROXY=127.0.0.1,localhost,circleci-internal-outer-build-agent,XXX.XXX.XXX.XXX:YYYY
[ ... some more output ...]
如果您sudo
进入另一个用户,您将丢失这些环境变量,并且docker
命令将尝试连接到本地计算机上的标准docker unix套接字。这就是为什么您看到:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
查看Building Docker Images文档,以确保他们在任何地方都不使用sudo
。
您可能是从您自己的环境(本地计算机限制对docker unix套接字的访问)中复制了这些sudo
命令。