Я пишу несколько сценариев автоматической сборки, которые используют контейнер docker в качестве среды сборки.
Одна вещь, которая меня беспокоит, - это найти способ извлечь артефакты сборки из контейнера и сохранить владение пользователем вызывающего процесса.
Обычно это происходит автоматически; когда процесс создает файл, файл принадлежит пользователю, запускающему процесс. Но когда процесс вызывает контейнер docker, контейнер запускается от имени другого пользователя (часто root
). Я не вижу простого способа запустить контейнер от имени того же пользователя, что и вызывающий процесс. Поэтому, если я сопоставляю локальный каталог при вызове docker (docker run --volume $(pwd)/target:/target
), тогда, когда сценарий сборки в изображении записывает его файлы, они появятся в каталоге сборки хоста, принадлежащем root
.
Другая альтернатива, которую я вижу, - запустить контейнер, дождаться его завершения, а затем использовать docker cp
для извлечения артефактов сборки. Проблема в том, что я не вижу способа запустить контейнер до завершения и затем получить идентификатор контейнера для недавно созданного контейнера.
Есть ли общий способ автоматически / программно извлечь артефакты сборки из контейнера docker, сохраняя право собственности на вызывающий процесс?