Я использую том при запуске контейнера докеров с чем-то вроде docker run --rm --network host --volume $PWD/some_dir:/tmp/some_dir ...
. Внутри контейнера я запускаю код Python, который создает каталог /tmp/some_dir
(переопределяет его, если он уже существует) и помещает туда файлы. Если я запустил контейнер докеров на своей локальной машине разработчика, файлы будут доступны на моей машине разработки в /tmp/some_dir
после запуска контейнера.
Однако, если я запускаю тот же контейнер как часть задания gitlab-ci
(«докер в докере», контейнер не является изображением, используемым для самого задания), файлы не будут доступны в /tmp/some_dir
(каталог существует).
В чем может быть причина отсутствия файлов?
Вы проверили хороший каталог на хорошем сервере?
Создание $ PWD / some_dir в контексте DinD. Результат должен быть в каталоге some_dir, созданном в домашнем каталоге пользователя docker на сервере, на котором запущен контейнер Gitlab CI.
Первая половина параметра docker run -v
, если это путь к каталогу, - это каталог, находящийся непосредственно на хост-машине. Если контейнер имеет доступ к сокету Docker и запускает другой контейнер, любые сопоставления каталогов, которые он предоставляет, находятся в пространстве файловой системы хоста, а не в пространстве файловой системы контейнера. (Если вы на самом деле используете Docker-in-Docker, это, вероятно, пространство файловой системы контейнера, в котором запущен вложенный демон Docker, но это все еще не пространство файловой системы вызывающего контейнера.)
Самый простой вариант - извлечь файлы docker cp
из внутреннего контейнера после его остановки, но до того, как вы его docker rm
; он может копировать все дерево каталогов.
Нет, я использую не исходный DiD, а вариант, в котором контейнер докеров gitlab-ci jo монтирует docker sock. Согласно этот ответ, начиная с Docker 1.8, можно копировать с хоста в контейнер (в дополнение к копированию из контейнера в хост). Но как насчет «синхронизации» от контейнера к хосту, запускаемой с хоста :)?