从 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

在我看来,您不应该在 logintagpush 命令中使用 sudo docker

只需使用 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

您可能从您自己的环境中复制了那些 sudo 命令,您的本地计算机限制了对 docker unix 套接字的访问。