詹金斯:无法连接到Docker守护程序

时间:2016-06-29 16:29:06

标签: jenkins docker centos

我在CentOS机器上运行Jenkins和Docker。我有一个Jenkins工作,可以获取Github仓库并构建Docker镜像。当我尝试运行该作业时,我收到错误:

+ docker build -t myProject . Cannot connect to the Docker daemon. Is the docker daemon running on this host? Build step 'Execute shell' marked build as failure Finished: FAILURE

即使我已经通过sudo usermod -aG docker jenkins将jenkins添加到我的docker用户组并重新启动了我的计算机,也会发生这种情况。我该如何解决这个问题?

顺便说一下,如果尝试将命令更改为sudo docker build -t myProject .,我只会收到错误sudo: sorry, you must have a tty to run sudo

7 个答案:

答案 0 :(得分:32)

安装Jenkins和Docker之后。 将jenkins用户添加到dockergroup(就像你一样)

sudo gpasswd -a jenkins docker

编辑以下文件

vi /usr/lib/systemd/system/docker.service

编辑此规则以公开API:

ExecStart=/usr/bin/docker daemon -H unix:// -H tcp://localhost:2375

现在是时候重新加载并重新启动Docker守护程序了

systemctl daemon-reload
systemctl restart docker

然后我重新启动了jenkins,我能够在我的jenkins工作中以jenkins用户身份执行docker命令

sudo service jenkins restart

答案 1 :(得分:3)

@lvthillo,你的回答很好,但还不够。您还需要创建docker组。请参阅 Docker的安装后步骤 以非root用户身份管理Docker  https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user

将运行jenkins的用户添加到docker组。

E.g。如果您在jenkins用户下运行Jenkins服务器:

第1步:创建Docker组

sudo groupadd docker

第2步:将您的用户添加到docker群组:

sudo usermod -aG docker jenkins

步骤3:注销并以jenkins身份重新登录,然后测试:

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

为此目的,docker组在启动时由docker守护程序进行特殊处理。该组中的任何用户现在都可以在没有sudo的情况下调用docker。小心使用。

https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface

答案 2 :(得分:3)

我和詹金斯有同样的问题。

我通过在docker-compose.yml上添加 /var/run/docker.sock:/var/run/docker.sock 来解决此问题:

  jenkins:
  container_name: jenkins
  build: "jenkins/"
  ports:
    - "8080:8080"
  environment:
    - JAVA_OPTS:-Djava.awt.headless=true
  volumes:
    - /var/jenkins_home
    - /var/run/docker.sock:/var/run/docker.sock

答案 3 :(得分:2)

另一种选择是将您的Jenkins泊坞主机指向'unix:///var/run/docker.sock'

这不是运行实际的docker主机并打开它。

答案 4 :(得分:1)

您不能使用invalid argument "myProject" for "-t, --tag" flag: invalid reference format: repository name must be lowercase See 'docker build --help'. 作为标签名称。 图片名称和标签必须全部小写。

Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

如果您使用的是docker-compose,则会看到一个误导性错误

output_sentence = []
for key in row['o'].lower():
    if key not in dictionary.keys():
        dictionary[key] = len(dictionary)
    output_sentence.append(dictionary[key])

final_output_sentence = np.array(output_sentence).reshape(1,-1,1)

https://github.com/docker/compose/issues/2816

答案 5 :(得分:0)

对我来说,解决方法是...

重新加载并重新启动Docker守护程序

systemctl daemon-reload
systemctl restart docker

但随后转到

通过管理Jenkins->管理节点->断开代理,断开Docker Jenkins代理的连接。

然后重新连接代理,该代理会将用户保留在docker组中。

答案 6 :(得分:0)

我使用的是 jenkins-blueocean

我的问题是我想使用 docker.sock 并使用与托管系统相同的守护程序,而不是从容器设置的 docker 守护程序进行部署

为此,请确保将 DOCKER_HOST 环境正确设置为您在卷中指定的 docker.socket

--env DOCKER_HOST=unix:///var/run/docker.sock \

并通过指定其 docker.sock 将 docker 守护进程指定为与托管容器的守护进程相同的守护进程

--volume /var/run/docker.sock:/var/run/docker.sock \

请确保您没有指定任何 TLS 参数,否则它可能会尝试使用 HTTPS 进行通信。

删除这样的东西:

--env DOCKER_TLS_VERIFY=1 \

Docker 文件:

FROM jenkins/jenkins:2.263.4-lts-jdk11
USER root
RUN apt-get update && apt-get install -y apt-transport-https \
       ca-certificates curl gnupg2 \
       software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN apt-key fingerprint 0EBFCD88
RUN add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/debian \
       $(lsb_release -cs) stable"
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins blueocean:1.24.4

运行命令:

docker run \
  --name jenkins-blueocean \
  --rm \
  --detach \
  --network jenkins \
  --env DOCKER_HOST=unix:///var/run/docker.sock \
  --env DOCKER_CERT_PATH=/certs/client \
  --publish 8080:8080 \
  --publish 50000:50000 \
  --volume jenkins-data:/var/jenkins_home \
  --volume jenkins-docker-certs:/certs/client:ro \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  myjenkins-blueocean:1.1