Как мне сделать копию Docker без полномочий root?

143

Как при создании образа Docker COPYдобавить файл в образ, чтобы полученный файл принадлежал пользователю, отличному от root?

FGreg
источник

Ответы:

206

Для версий v17.09.0-ce и новее

Используйте необязательный флаг --chown=<user>:<group>с командами ADDили COPY.

Например

COPY --chown=<user>:<group> <hostPath> <containerPath>

Документация для флага --chown теперь находится на главной странице справки Dockerfile .

Выпуск 34263 был объединен и доступен в выпуске v17.09.0-ce .


Для версий старше v17.09.0-ce

Docker не поддерживает COPYкак пользователь кроме root. Вам нужно chown/ chmodфайла после в COPYкоманде.

Пример Dockerfile:

from centos:6
RUN groupadd -r myuser && adduser -r -g myuser myuser
USER myuser
#Install code, configure application, etc...
USER root
COPY run-my-app.sh /usr/local/bin/run-my-app.sh
RUN chown myuser:myuser /usr/local/bin/run-my-app.sh && \
    chmod 744 /usr/local/bin/run-my-app.sh
USER myuser
ENTRYPOINT ["/usr/local/bin/run-my-app.sh"]

До v17.09.0-ce ссылка на Dockerfile для COPYкоманды гласила:

Все новые файлы и каталоги создаются с UID и GID 0.


История Эта функция отслеживалась в нескольких выпусках GitHub: 6119 , 9943 , 13600 , 27303 , 28499 , выпуск 30110 .

Проблема 34263 - это проблема, которая реализовала необязательную функциональность флага, а проблема 467 - обновление документации.

FGreg
источник
3
Это неприятно, так как перехват большого количества файлов стал невероятно медленным, так как overlay2 стал драйвером хранилища по умолчанию
hbogert
1
Да, кроме того, он создает большой дополнительный слой изображения без видимой причины (в моем случае:> 300 МБ для работы chownс 40 МБ файлов).
Дирк
Есть также одно преимущество для запуска chown вместе с командой COPY - уменьшение размера. Если мы запустим эти две команды отдельно (COPY <host_path> <source_path>; chown other_user: other_user), то он создаст один дополнительный слой, который в конечном итоге удваивает размер изображения.
Абхишек Тхакур
Этот ответ - палочка-выручалочка. Большое спасибо, решил проблему, с которой я боролся несколько часов.
Colby Hill,