Jenkins:无法连接到Docker守护程序

lnxxn5zx  于 2022-11-07  发布在  Jenkins
关注(0)|答案(8)|浏览(214)

我正在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

u91tlkcl

u91tlkcl1#

在安装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

不要使用ExecStart创建新行,只需将命令添加到现有行的末尾。

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

systemctl daemon-reload
systemctl restart docker

然后重新启动jenkins,您应该能够在jenkins作业中以jenkins用户的身份执行docker命令

sudo service jenkins restart
xnifntxz

xnifntxz2#

我和Jenkins也有同样的问题。
我通过在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
kyvafyod

kyvafyod3#

另一个选择是将Jenkins Docker主机指向“unix:///var/run/docker.sock”
这不是运行实际的Docker主机并将其打开。

0qx6xfy6

0qx6xfy64#

@lvthillo,您的回答很好,但是,还不够。您还需要创建Docker组。请参阅Docker的安装后步骤****以非root用户身份管理Dockerhttps:docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user
以将运行jenkins的用户添加到Docker组。
例如,如果您在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

ar5n3qh5

ar5n3qh55#

不能使用myProject作为标记名。图像名和标记必须全部小写。

invalid argument "myProject" for "-t, --tag" flag: invalid reference format: repository name must be lowercase
See 'docker build --help'.

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

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.

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

o75abkj4

o75abkj46#

对我的解决办法是...
重新加载并重新启动Docker守护程序

systemctl daemon-reload
systemctl restart docker

但随后
通过管理Jenkins -〉管理节点-〉断开代理,断开Docker Jenkins代理。
然后重新连接代理,该代理将用户保留在Docker组中。

neekobn8

neekobn87#

我用的是Jenkins蓝海
我的问题是,我想使用docker.sock并使用与托管系统相同的守护进程,而不是从容器设置的docker守护进程进行部署
对于,请确保将DOCKER_HOST环境正确设置为在卷中指定Docker.Socket

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

并通过指定docker守护进程的docker.sock,将其指定为托管您希望遵从的容器的守护进程

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

请确保未指定任何TLS参数,否则它可能会尝试使用HTTPS进行通信。
删除以下内容:

--env DOCKER_TLS_VERIFY=1 \

停靠文件:

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
fgw7neuy

fgw7neuy8#

尝试运行:
sudo gpasswd -a jenkins docker
这会将Jenkins用户添加到Docker组。

相关问题