从 CircleCI 构建镜像并将其推送到 DockerHub
Build and push image to DockerHub from CircleCI
我是 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
在我看来,您不应该在 login
、tag
和 push
命令中使用 sudo docker
。
只需使用 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
。
您可能从您自己的环境中复制了那些 sudo
命令,您的本地计算机限制了对 docker unix 套接字的访问。
我是 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
在我看来,您不应该在 login
、tag
和 push
命令中使用 sudo docker
。
只需使用 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
。
您可能从您自己的环境中复制了那些 sudo
命令,您的本地计算机限制了对 docker unix 套接字的访问。