1. ホーム
  2. docker

[解決済み] Dockerのコピーと所有者の変更

2023-01-06 03:59:24

質問

次のようなDockerfileがあるとします。

FROM ubuntu
RUN groupadd mygroup
RUN useradd -ms /bin/bash -G mygroup john
MKDIR /data
COPY test/ /data/test data
RUN chown -R john:mygroup /data
CMD /bin/bash

コピーしたテスト用ディレクトリでは、ファイルのパーミッションを770に設定しました。

もし私が su john を実行すると、テスト ディレクトリのファイルまたはサブディレクトリにアクセスできません。この問題は、コピーされたディレクトリがまだ root によって所有され、パーミッションが 770 に設定されている、aufs ファイルシステムの所有権に関連しているようです。

パーミッションを正しく設定するために、この問題の回避策はありますか? 1 つは、コピーする前に、元のディレクトリのパーミッションをコンテナー ユーザーの uid に設定することです。しかし、これはどちらかというとハックに近いように思えます。

どのように解決するのですか?

私は、うまくいく解決策を見つけたと思います。データ ボリューム コンテナを使用すると、トリックを実行できます。最初に、外部ディレクトリのコピーを含むデータ ボリューム コンテナーを作成します。

FROM busybox
RUN mkdir /data
VOLUME /data
COPY /test /data/test
CMD /bin/sh

アプリケーションコンテナにはユーザーを配置し、以下のような構成にします。

FROM ubuntu
RUN groupadd mygroup
RUN useradd -ms /bin/bash -G mygroup john
COPY setpermissions.sh /root/setpermissions.sh
CMD /root/setpermissions.sh && /bin/bash

setpermissionsスクリプトは、ユーザー権限を設定する仕事をします。

#!/bin/bash

if [ ! -e /data/.bootstrapped ] ; then
  chown -R john:mygroup /data
  touch /data/.bootstrapped
fi

これで、あとは --volumes-from <myDataContainerId> を使うだけです。