簡體   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