非rootとしてDocker COPYを行うにはどうすればよいですか?


142

DockerイメージをビルドしCOPYているときに、結果のファイルがroot以外のユーザーによって所有されるようにするには、どのようにしてファイルをイメージに入れますか?

回答:


205

バージョンv17.09.0-ce以降の場合

またはコマンドでオプションのフラグ--chown=<user>:<group>を使用します。ADDCOPY

例えば

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

--chownフラグのドキュメントは、メインのDockerfileリファレンスページに掲載されています

問題34263はマージされ、リリースv17.09.0-ceで利用可能です。


v17.09.0-ceより古いバージョンの場合

DockerはCOPYroot以外のユーザーとしてはサポートしていません。コマンドのにファイルを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以前は、COPYコマンドのDockerfileリファレンスは次のように述べています。

すべての新しいファイルとディレクトリは、UIDとGIDが0で作成されます。


歴史 :この機能は、複数のGitHubの問題を通して追跡された61199943136002730328499発行30110

問題34263はオプションのフラグ機能を実装した問題であり、問題467はドキュメントを更新しました。


3
これはイライラさせられます。overlay2がデフォルトのストレージドライバーになったため、多くのファイルの変更が非常に遅くなったためです
hbogert

1
さらに、明らかな理由もなく、大きな追加の画像レイヤーが作成されます(私の場合:chown40MBのファイルで実行する場合は> 300MB )。
Dirk

サイズの縮小であるCOPYコマンドと一緒にchownを実行することにも1つの利点があります。これら2つのコマンドを別々に実行すると(COPY <host_path> <source_path>; chown other_user:other_user)、1つの追加レイヤーが作成され、最終的に画像サイズが2倍になります。
abhishek thakur

この答えは命の恩人です。本当にありがとう、私が数時間戦っていた問題を解決しました。
コルビーヒル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.