#docker #docker-in-docker
#docker #docker-in-docker
Вопрос:
Для целей CI / CD мне нужен docker в docker:
docker network create some-network
docker volume create some-docker-certs-ca
docker volume create some-docker-certs-client
docker run --privileged --name some-dind -d --network some-network --network-alias docker -e DOCKER_TLS_CERTDIR=/certs -v some-docker-certs-ca:/certs/ca -v some-docker-certs-client:/certs/client docker:dind
Теперь, если я запущу docker: последнее изображение с -it
опцией, я могу использовать docker в контейнере, как и ожидалось:
docker run --rm -it --network some-network -e DOCKER_TLS_CERTDIR=/certs -v some-docker-certs-client:/certs/client:ro docker:latest sh
/ # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
/ #
Но мне нужно настроить docker: последнее изображение в Dockerfile:
FROM docker:latest
# install package1
# install package2
# install package3
...
# install package4
И создайте настроенный образ docker:
docker build -t customized-docker .
Но когда я запускаю образ customized-docker с -it
параметрами, он не может подключиться к демону docker:
docker run --rm -it --network some-network -e DOCKER_TLS_CERTDIR=/certs -v some-docker-certs-client:/certs/client:ro customized-docker:latest sh
/ # docker ps
Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?
/ #
В чем проблема? Могу ли я каким-либо образом использовать настроенный образ docker?
Редактировать: я нашел лучший способ сделать свой CI / CD без «docker в docker». Как упоминал Дэвид Мейз, в большинстве случаев нет необходимости использовать «docker в docker». Но мой вопрос все еще остается: почему контейнер docker: latest может подключаться к демону docker, но настроенный контейнер docker не может.
Комментарии:
1.
docker:latest
иdocker:dind
отличаются. Но использование DinD для вашей системы CI обычно не рекомендуется ; стандартная практика — вместо этого использовать сокет Docker хоста.2. @DavidMaze Спасибо! Я знаю, что они разные! Но вы правы. Я нашел лучший способ без использования «docker в docker».
3. … вы пытаетесь использовать настроенный образ в качестве контейнерного демона Docker или просто для
docker
клиента командной строки, вызывающего другой контейнер DinD? Я думаю, что, возможно, я был сбит с толку, читая, как вы пытались использовать пользовательский образ.4. Ваш пользовательский образ сбрасывается
ENTRYPOINT
? ИлиUSER
? В стандартном образе есть скрипт точки входа, который пытается выяснить, с чем он разговаривает; то, что вы видите ошибку для незашифрованного порта 2375, предполагает, что он не находит ваши сертификаты.5. @DavidMaze На самом деле я не меняю ни одного из них. Я просто устанавливаю некоторые пакеты.