[解決済み] 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>
を使うだけです。
関連
-
[解決済み] Dockerfileの'COPY'と'ADD'コマンドの違いは何ですか?
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] DockerfileのCMDとENTRYPOINTの違いは何ですか?
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerコンテナに環境変数を渡すにはどうしたらいいですか?
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み] COMPOSE_HTTP_TIMEOUT のデフォルト値を docker-compose コマンドで上書きする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Dockerがコンテキスト外のシンボリックリンクをフォローする
-
[解決済み] ドッカーENVとRUNエクスポートの比較
-
[解決済み] docker webdevの良いワークフローは何だろう?
-
[解決済み] Dockerの実行と作成
-
[解決済み] Docker build 「archive.ubuntu.comを解決できませんでした」 apt-get fails to install anything
-
[解決済み] コンテナ上でローカルファイルを使用するには?
-
[解決済み] 実行中のすべてのdockerコンテナを再起動するためのコマンド?
-
[解決済み] DC/OS上のDockerコンテナにおけるMarathonとKubernetesとDocker Swarmの比較
-
[解決済み] pm2とdockerを一緒に使う意味は何ですか?
-
[解決済み] Dockerにマウントされたボリュームは、Linuxスタイルのパスから変換する際にWindowsパスの最後に;Cを追加します。