繁体   English   中英

Windows10 主页上的 Docker - Docker 容器内部连接到 Docker 引擎

[英]Docker on Windows10 home - inside docker container connect to the docker engine

在创建 Jenkins Docker 容器时,能够连接到 Docker 守护进程非常有用。 这样,我就可以在 Jenkins 容器内启动 docker 命令。

例如,在启动 Jenkins Docker 容器后,我想“docker exec -it container-id bash”并启动“docker ps”。

在 Linux 上,您可以在 /var/run/docker.sock 上使用绑定挂载。 在 Windows 上,这似乎是不可能的。 解决方案是使用“命名管道”。 因此,在我的 docker-compose.yml 文件中,我尝试创建一个命名管道。

version: '2'
services:
  jenkins:
    image: jenkins-docker
    build:
      context: ./
      dockerfile: Dockerfile_docker
    ports:
      - "8080:8080"
      - "50000:50000"
    networks:
      - jenkins
    volumes:
      - jenkins_home:/var/jenkins_home
      - \\.\pipe\docker_engine:\\.\pipe\docker_engine
      # - /var/run/docker.sock:/var/run/docker.sock
      # - /path/to/postgresql/data:/var/run/postgresql/data
      # - etc.

使用此文件启动 docker-compose 时,出现以下错误:

无法连接到 unix:///var/run/docker.sock 上的 Docker 守护进程。 docker 守护进程是否正在运行?

如何设置 docker-compose 文件,以便我可以在启动的容器内使用 docker.sock(或 Docker)?

在 Linux 上,您可以使用类似卷的内容:/var/run/docker.sock:/var/run/docker.sock。 这在 Windows 环境中不起作用。 当您将此文件夹 (/var) 添加到 Oracle VM Virtualbox 时,它将永远不会获得任何 IP。 并且在很多帖子上

您可以在tcp://localhost:2375上公开守护程序,而无需在设置中使用 TLS。 通过这种方式,您可以将 Jenkins 配置为使用 Docker API 而不是套接字。 我鼓励您阅读Nick Janetakis 撰写的关于“了解 Docker 守护程序和 Docker CLI 如何协同工作”的文章

然后有几个 Jenkins 的 Docker 插件允许这种连接:

在此处输入图片说明

此外,您可以在 wiki.jenkins.io 上Docker 插件文档中找到其他信息:

def dockerCloudParameters = [
  connectTimeout:   3,
  containerCapStr:  '4',
  credentialsId:    '',
  dockerHostname:   '',
  name:             'docker.local',
  readTimeout:      60,
  serverUrl:        'unix:///var/run/docker.sock', // <-- Replace here by the tcp address
  version:          ''
]

编辑 1:

我不知道它是否有用,但是根据Docker Daemon configuration doc ,Windows 上的 Docker Daemon 位于C:\\ProgramData\\docker

编辑2:

您需要明确说明使用host网络的容器,因为您想同时公开 Jenkins 和 Docker API。 按照本文档,您只需将--network=host (或--network=host -compose 中的network_mode: 'host' )添加到您的容器/服务中。 有关更多信息,您可以阅读本文以了解这种网络模式的目的是什么。

第一次尝试是使用“Docker Quickstart 终端”启动 Docker 环境。 在该环境中运行 Docker 命令时,这是一个很好的解决方案。

当通过 Docker 安装完整的 CI/CD Jenkins 环境时,意味着在 Jenkins Docker 容器内您需要访问 Docker 守护进程。 在尝试了许多解决方案,阅读了许多帖子后,这不起作用。 @Paul Rey,非常感谢您尝试各种路线。

一个好的解决方案是获取一个 Ubuntu 虚拟机并通过 Oracle VM Virtualbox 安装它。 然后通过此官方说明安装 Docker非常重要

在安装 Docker 之前,当然需要先安装 Curl、Git 等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM