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