【问题标题】:Configuring dynamically provisioned Docker agents配置动态供应的 Docker 代理
【发布时间】:2019-09-04 19:54:28
【问题描述】:

我运行一个 jenkins 容器,但我想配置动态配置的 Docker 代理,我在 jenkins 上安装了 docker 插件。但是,即使我更改了 /lib/systemd/system/docker.service 转向,我也无法到达容器内的 docker:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

进入

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

然后我重新启动守护进程:

sudo systemctl daemon-reload

sudo service docker restart。

之后我去jenkins配置并创建了docker cloud。

事实是,当我在 docker cloud details 中测试 tcp://172.17.0.1:2375 时,它不起作用。我在容器中测试 ping 172.17.0.1,容器到达该主机。

我错过了什么吗?

【问题讨论】:

  • reach docker inside the container 是什么意思?您的更改只是启用了docker引擎的远程访问,没有看到与您的问题有任何关系。
  • 我的意思是,如果有一个常规安装,我可以在 jenkins 中使用云来动态创建 docker 容器以使用管道。我可以对 dockerized Jenkins 做同样的事情吗?我可以通过使用 jenkins 容器而不是 jenkins 常规安装来访问主机环境上的 docker 服务器?

标签: docker jenkins agent


【解决方案1】:

我猜你需要的是access docker daemon from docker container:

  1. 启动jenkins容器时添加-v /var/run/docker.sock:/var/run/docker.sock

  2. 添加-v $(which docker):/usr/bin/docker挂载到jenkins容器,或者从https://download.docker.com/linux/static/stable/下载相关的docker预建客户端,见this

使用1,容器将能够连接到docker daemon 和新的同级容器,使用2,您的jenkins 容器将拥有docker client 可用。您可能还想看看this

【讨论】:

  • 但是以这种方式我必须以 root 身份启动容器,否则 docker 不接受套接字上的连接:尝试在 unix:/// 连接到 Docker 守护进程套接字时获得权限被拒绝var/run/docker.sock:获取 http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json:拨打 unix /var/run/docker.sock:连接:权限被拒绝
  • 在启动jenkins容器时添加-u jenkins:$(cut -d: -f3 < <(getent group docker))怎么样?
  • 我以 root 身份启动了容器,但什么也没有。当我在我的主机 curl http://172.17.0.1:2375/version 上尝试时,我明白了,但是当我在容器内尝试时,即使我使用 docker cli 也没有答案。如何从容器到达 tpc://172.17.0.1:2375?
  • root@3812f8e2aace:/# docker ps 容器 ID 图像命令创建状态端口名称 3812f8e2aace jenkins/jenkins:2.176.3 "/sbin/tini -- /usr/..." 大约一个小时前一个小时 50000/tcp, 0.0.0.0:9090->8080/tcp jenkins ---------------- root@3812f8e2aace:/# curl 127.0.0.1:2375 curl: (7) 失败连接到 127.0.0.1 端口 2375:连接被拒绝
  • 我在 80 端口创建了一个 nginx 容器监听,我使用 tutum/curl 来获取它并且它可以工作。但是,当我尝试对 docker 地址执行 curl 时,什么也没有发生,而在本地我得到了端点 /version。
【解决方案2】:

默认情况下,容器由桥接网络启动。在 docker run 中声明 --network=host 选项就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2018-05-29
    • 2018-07-01
    相关资源
    最近更新 更多