2017-02-14 24 views
0

У меня есть изображение, которое я использую для запуска моих сборников CI/CD (с использованием GitLab CE). Я хотел бы, чтобы развернуть мое приложение делает что-то вроде этого внутри контейнера:Доступ к хост-докер-машине из контейнера

eval "$(docker-machine env manager)" 
sudo docker stack deploy --compose-file docker-stack.yml web 

Однако, я хотел бы докер-машину к машинам доступа, определенных на хост-системе, так как контейнер будет разрушен, и я не хотите включать сведения о доступе на изображение.

Я попробовал несколько вещей

доступ к удаленному хосту через docker-machine

  • Создать докер-машину на хосте и установите MACHINE_STORAGE_PATH так, что она доступна для контейнера
  • Подключение к дистанционной докерной машине вручную из контейнера и установка MACHINE_STORAGE_PATH, равная установленному объему
  • Монтаж Docker гнездо

В обоих случаях я могу видеть, хранение машина сохраняется, но всякий раз, когда я создаю новый контейнер и запустить docker-machine ls ни один из машин не указаны.

Доступ к удаленному хосту с помощью DOCKER_HOST

  • вперед порт удаленного машины докера в порт хоста Docker docker-machine ssh manager-1 -N -L 2376:localhost:2376
  • export DOCKER_HOST=:2376
  • Скажите докер использовать одни и те же сертификаты, которые используются docker- машины: export DOCKER_TLS_VERIFY=1 и export DOCKER_CERT_PATH=/Users/me/.docker/machine/machines/manager-‌​1
  • Испытание с docker info

Это дает мне error during connect: Get https://localhost:2376/v1.26/info: x509: certificate signed by unknown authority

Любые идеи о том, как я могу выполнить удаленное развертывание внутри контейнера?

Благодаря

EDIT

Вот схема, чтобы попытаться помочь лучше общаться сценарий.

architectur

+0

Я бы не установил 'docker.sock', как было рекомендовано. см. эту статью для информации https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/ вы открываете большое отверстие безопасности. –

+0

Вы считаете, что это большая часть риска, если единственным контейнером, работающим на сокете, является контейнер сборки? – jaredcnance

+0

Обычно вы не хотите запускать контейнер внутри контейнера. если вам нужен доступ к томам, вы должны вместо этого «-link» или с помощью 'docker> = 1.12' создать сетевой оверлей. нет ничего плохого в использовании контейнера для запуска других контейнеров, просто запустите их на главной машине, а не внутри контейнера. делать контейнеры в контейнерах - это анти-шаблон, с которым вам со временем сложно справиться. –

ответ

-1

В случае, если вы хотите общаться с вашего CI контейнера к хосту Докер вы можете просто смонтировать разъем Docker при запуске CI контейнера:

docker run -v /var/run/docker.sock:/var/run/docker.sock <gitlab-image> 

Теперь вы можете запускать докер команды на хост из контейнера CI.

+0

Да, поэтому я уже это делаю. Я могу делать такие вещи, как 'docker build' и' docker login', но когда я хочу фактически развернуть на удаленную машину, 'docker-machine ls' не показывает никаких машин. Однако при запуске 'docker-machine ls' на хосте отображается несколько машин. Есть ли сокет, который необходимо установить для докерной машины? – jaredcnance

+0

это не рекомендуется. установка 'docker.sock' является проблемой безопасности. https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/ есть много статей об этом, если вы используете докер в производстве, это не рекомендуется. –

0

Не используйте докерную машину для этого.

Docker-machine хранит файлы в $ HOME /.docker/machine, поэтому при перезапуске с новой копией этой папки все ранее определенные машины будут удалены. Вы можете сохранить эту папку в качестве тома, но для ваших целей намного проще.

Решение состоит в том, чтобы установить гнездо для докеров и либо как root, либо из пользователя с тем же самым gid, что и гнездо для докеров (обратите внимание, что имена групп внутри и снаружи контейнера могут не совпадать, поэтому gid важен), запустите свои docker ... команды как обычно. Вы можете пропустить docker-machine eval полностью, так как вы выполняете команды против локального гнезда докеров.

Если вам нужно дистанционно запускать команды, мне легче определить переменные и DOCKER_TLS_VERIFY, а не использовать docker-machine.

+0

Итак, я уже монтирую сокет для выполнения таких действий, как создание изображений. Если я настрою туннель от хоста к удаленному компьютеру: 'docker-machine ssh manager-1 -N -L 2376: localhost: 2376', а затем попытайтесь установить' DOCKER_HOST =: 2376' и запустите 'docker info' I get: Получить http: // localhost: 2376/v1.26/info: неверный ответ HTTP «\ x15 \ x03 \ x01 \ x00 \ x02 \ x02». – jaredcnance

+0

Затем я попытался «экспортировать DOCKER_TLS_VERIFY = 1' и« экспортировать DOCKER_CERT_PATH =/Users/me/.docker/machine/machines/manager-1', а теперь 'docker info' дает ошибку во время подключения: Get https: // localhost: 2376/v1.26/info: x509: сертификат, подписанный неизвестным органом. – jaredcnance

+0

Похоже, вы все еще пытаетесь использовать докер-машину. Также неясно, какие команды и файлы/каталоги вы используете от хоста и внутри контейнера. Это по определению не то же самое. См. Эту ссылку для получения более подробной информации об использовании удаленных сокетов докеров: https://docs.docker.com/engine/security/https/ – BMitch