Windows 10主页上的Docker - 内部docker容器连接到docker引擎

问题描述 投票:0回答:2

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

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

在Linux上,您可以在/var/run/docker.sock上使用bind-mounts。在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
      # - docker.sock:/var/run/docker.sock
    # ... postgres, 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。在很多帖子上

docker jenkins docker-compose
2个回答
1
投票

您可以在设置中在没有TLS的情况下在tcp://localhost:2375上公开守护程序。这样,您可以将Jenkins配置为使用Docker API而不是套接字。我鼓励你阅读this article by Nick Janetakis about "Understanding how the Docker Daemon and the Docker CLI work together"

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

enter image description here

另外,您可以在Docker plugin documentation on wiki.jenkins.io中找到更多信息:

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:

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

编辑2:

您需要明确说明容器使用host网络,因为您想要公开Jenkins和Docker API。在this documentation之后,您只需要将--network=host(或者docker-compose中的network_mode: 'host')添加到您的容器/服务中。有关详细信息,您可以阅读this article以了解此网络模式的用途。


0
投票

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

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

一个好的解决方案是获取Ubuntu虚拟机并通过Oracle VM Virtualbox进行安装。因此,通过this official description安装Docker非常重要。

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

© www.soinside.com 2019 - 2024. All rights reserved.