Docker на Windows10 home - внутри док-контейнера подключается к докеру - PullRequest
0 голосов
/ 07 сентября 2018

При создании контейнера Jenkins Docker очень полезно иметь возможность подключаться к демону Docker.Таким образом, я могу запускать команды Docker внутри контейнера Jenkins.

Например, после запуска контейнера Jenkins Docker я хотел бы «docker exec -it container-id bash» и запустить «docker ps».

В Linux вы можете использовать bind-mounts в /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
      # - docker.sock:/var/run/docker.sock
    # ... postgres, etc.... 

При запуске docker-compose с этим файлом я получаю следующую ошибку:

Невозможно подключиться к демону Docker в unix: /// var / run / docker.носок.Работает ли демон docker?

Как настроить файл docker-compose, чтобы я мог использовать docker.sock (или Docker) внутри запущенного контейнера?

В Linux вы можете использовать что-то вроде тома: /var/run/docker.sock:/var/run/docker.sock.Это не работает в среде Windows.Когда вы добавляете эту папку (/ var) в Oracle VM Virtualbox, она не будет вечно получать IP.И на многих постах

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Первая попытка состояла в том, чтобы запустить среду Docker, используя «терминал быстрого запуска Docker». Это хорошее решение при запуске команд Docker в этой среде .

Установка полной среды CI / CD Jenkins через Docker означает, что в контейнере Jenkins Docker вам необходим доступ к демону Docker. Попробовав много решений, прочитав много постов, это не сработало. @Paul Rey, большое спасибо за то, что попробовали все виды маршрутов.

Хорошее решение - получить виртуальную машину Ubuntu и установить ее через Oracle VM Virtualbox. Тогда ОЧЕНЬ ВАЖНО для установки Docker через это официальное описание .

Перед установкой Docker, конечно же, необходимо установить Curl, Git и т. Д.

0 голосов
/ 07 сентября 2018

Вы можете выставить демона на tcp://localhost:2375 без TLS в настройках. Таким образом, вы можете настроить Jenkins для использования Docker API вместо сокета. Я рекомендую вам прочитать эту статью Ника Джанетакиса о «Понимании того, как Docker Daemon и Docker CLI работают вместе» .

А затем есть несколько плагинов Docker для Jenkins, которые позволяют это соединение:

enter image description here

Кроме того, вы можете найти дополнительную информацию в документации плагина Docker на 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:

Не знаю, полезно ли это, но Docker Daemon в Windows расположен по адресу C:\ProgramData\docker в соответствии с Docker Daemon, конфигурация doc .

РЕДАКТИРОВАТЬ 2:

Вам необходимо явно указать контейнер для использования сети host, потому что вы хотите предоставить доступ к Jenkins и Docker API. Следуя этой документации , вам нужно всего лишь добавить --network=host (или network_mode: 'host' в docker-compose) в ваш контейнер / службу. Для получения дополнительной информации вы можете прочитать эту статью , чтобы понять, какова цель этого сетевого режима.

...