сборка докера внутри сборки докера - PullRequest
1 голос
/ 06 марта 2019

Tl; р; Что эквивалентно Docker Run -V для сборки Docker?

Я создал тестовый набор, включающий два шага:

  • построение образа докера с использованием Dockerfile
  • запуск команды с использованием только что созданного образа докера

Это хорошо работает, но я сейчас думаю о том, как запустить его из в нашей настройке Jenkins CI.

У нас есть Dockerfile, который Jenkins использует для настройки сборки среды и для запуска тестов, поэтому у меня есть докер в ситуации докер .

Я прочитал обычный совет, в том числе https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/ но я все еще немного озадачен основами. Я думаю, что обсуждения имеют тенденцию сосредотачиваться на "Docker Run" внутри "Docker Run" в то время как я хочу "сборку докера, затем запустить docker" внутри "сборки докера"

Для простоты я пока игнорирую часть Дженкинса и сократил свой Dockerfile до до минимума, который я строю, используя:

docker build -t minimal -f Dockerfile.minimal .

Я могу создать образ Docker, который может почти запустить Docker.

Моя первая проблема заключается в том, что вывод запуска "Docker run" не отображается в терминале

RUN docker -v /var/run/docker.sock:/var/run/docker.sock run hello-world 

работает, по-видимому, успешно, но я вижу только:

Step 10/10 : RUN docker -v /var/run/docker.sock:/var/run/docker.sock run hello-world
 ---> Running in 6334040920e9
Docker version 18.09.3, build 774a1f4
Removing intermediate container 6334040920e9
 ---> bd3eaf625228

Вместо:

>docker run -t hello-world

Hello from Docker!
...

Я хочу построить изображение в родительском контексте как родного брата, а не как ребенка. Проблема в том, что «сборка докера» не имеет опции -v. Итак, на данный момент у меня есть:

Step 12/12 : RUN docker build -f Dockerfile .
---> Running in cb45800fb1cf

ошибка проверки контекста: «невозможно статить» / proc / 1 / map_files ». Команда '/ bin / sh -c docker build -f Dockerfile.' вернул ненулевой код: 1

Мой текущий минимальный Dockerfile:

FROM debian:9

RUN apt-get -y update && apt-get install -y gpg-agent apt-transport-https ca-certificates curl gnupg2 software-properties-common
RUN curl -XGET -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get -y update && apt-get -y install docker-ce

RUN whoami
VOLUME /var/run/docker.sock
RUN docker --version
RUN docker -v /var/run/docker.sock:/var/run/docker.sock ps
RUN sh -c '(docker -v /var/run/docker.sock:/var/run/docker.sock run hello-world)'

COPY Dockerfile2 Dockerfile
RUN docker build -f Dockerfile .

, где Dockerfile2 еще более минимален:

FROM debian:9
RUN echo "hello world"

Это может быть дубликат Докер доступа в Dockerfile? , который говорит, что это невозможно, но, возможно, Docker эволюционировал с тех пор, как на этот вопрос был дан ответ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...