Запуск Docker внутри контейнера Docker: не удается подключиться к демону Docker - PullRequest
0 голосов
/ 06 января 2019

Я создал Dockerfile для запуска Docker внутри Docker:

    FROM ubuntu:16.04
RUN apt-get update && \
    apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common && \
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - &&\
    apt-key fingerprint 0EBFCD88

RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
   apt-get update && \
   apt-get install -y docker-ce && \
   systemctl enable docker

После того, как я запустил свой контейнер и запустил Docker PS, я получил: «Не удается подключиться к демону Docker в unix: ///var/run/docker.sock. Работает ли демон Docker?»

я выполнил команду dockerd внутри моего контейнера:

Ошибка запуска демона: Ошибка инициализации сетевого контроллера: ошибка получения экземпляра контроллера: не удалось создать цепочку NAT DOCKER: сбой iptables: iptables -t nat -N DOCKER: iptables v1.6.0: не удалось инициализировать таблицу iptables `nat ': В доступе отказано (вы должны быть пользователем root) Возможно, iptables или ваше ядро ​​необходимо обновить. (статус выхода 3)

Пожалуйста, сообщите

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Рекомендация, которую я получил для этого, заключалась в том, чтобы использовать параметр -v в Docker Run для сопоставления сокета докера между контейнерами, например так:

-v /var/run/docker.sock:/var/run/docker.sock
0 голосов
/ 06 января 2019

Если вы действительно хотите запустить контейнер Docker внутри другого контейнера Docker, вам следует использовать уже существующие изображения, предоставленные Docker (https://hub.docker.com/_/docker) вместо создания собственного базового изображения: выберите изображения, помеченные как dind ( d ocker in d ocker) или <docker_version>-dind (например, 18.09.0-dind). Если вы хотите запустить свой собственный образ (не рекомендуется), дона не забудьте запустить его с опцией --privileged (вот почему вы получаете ошибку).

Пример с docker официальными изображениями:

# run Docker container running Docker daemon
docker run --privileged --name some-docker -d docker:18.09.0-dind

# run hello-world Docker image inside the Docker container previously started
docker exec -i -t some-docker docker run hello-world

Тем не менее, я согласен с комментарием @DavidMaze и ссылочным постом в блоге, на который он ссылался ( Не используйте Docker-in-Docker для CI ): Docker-in-Docker следует избегать в максимально возможной степени .

...