从CircleCI构建映像并将其推送到DockerHub

时间:2019-10-19 09:48:11

标签: docker continuous-integration continuous-deployment 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

1 个答案:

答案 0 :(得分:0)

在我看来,您不应该在sudo dockerlogintag命令中使用push

只需使用docker logindocker tagdocker 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命令。