Скопируйте файлы из контейнера на хост, используя Dockerfile - PullRequest
0 голосов
/ 13 июня 2018

Я пишу файл Docker, и мое требование - скопировать содержимое папки внутри контейнера на локальный хост.Как я могу достичь этого?

FROM ubuntu

RUN apt-get update && apt-get install -y apache2 && apt-get  install nginx  -y


#COPY resources   /var/www/html/

#VOLUME /var/www/html:/var/www/html

COPY /var/www/html/ /var/www/html/
CMD ["nginx", "-g", "daemon off;"]

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Нет поддержки записи Dockerfile с оператором для изменения файлов на хосте во время docker build.Вы должны иметь в виду, что фактическая сборка образа может происходить в другом движке Docker, чем тот, с которого вы запускаете сборку (Dockerfile вместе с контекстом его сборки загружаются в Docker Engine).

здесь есть как минимум две опции:

1) Напишите оператор RUN, который использует BUILD_ARG для связи с другим хостом и запускает там какое-то действие.Я считаю это очень плохим хаком, поэтому я предпочитаю не говорить более конкретно о том, как может выглядеть это утверждение.

2) Выполните нужные действия, как обычно docker run, где вы можете смонтировать хосткаталог как том в контейнер.

Я еще не изучал инструмент https://github.com/genuinetools/img.Он также нацелен на создание изображений, но может предоставить больше возможностей во время сборки.

0 голосов
/ 13 июня 2018

Вероятно, плохая идея копировать файлы из контейнера на хост во время сборки.Вы должны серьезно рассмотреть свой вариант использования.

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

  1. Измените конфигурацию dockerd, как описано в https://success.docker.com/article/how-do-i-enable-the-remote-api-for-dockerd. В основном добавьте -H tcp://0.0.0.0:2376.Это очень рискованная процедура, так как она открывает вам доступ к любому пользователю вашей сети.Существуют способы уменьшить этот риск с помощью аутентификации, но на самом деле лучший способ - это ПРОСТО НЕ ДЕЛАЙТЕ ЭТОГО .
  2. Изменить свой файл Docker:
    1. Добавить ARG DOCKER_HOST до блоков RUN.
    2. В блоках выполнения:
      1. Установить докер.
      2. Добавить `export DOCKER_HOST = $ {DOCKER_HOST}.
      3. Добавить docker container run --mount type=bind,source=/,destination=/srv/host alpine:3.4 ...
  3. Определите IP-адрес вашего хост-компьютера.Предположим, это 10.10.20.100.
  4. Измените команду сборки, добавив --build-arg DOCKER_HOST = 10.10.20.100.

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

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

0 голосов
/ 13 июня 2018

Нет конкретного способа сделать это во время процесса сборки.Во время выполнения вы можете копировать файлы через подключенный том, но это не доступно в процессе сборки.Если вы просто имеете в виду во время выполнения, то можете делать что-то вроде docker run -v .:/out myimage -- cp -r /from/somewhere /out или подобное.

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