私はDockerfileを書いています.Dockerfileでは、ルートユーザーがWebサイトの展開を管理するためにblog
という名前のユーザーを作成します。 Docker Hub wordpressコンテナをベースに使用しています。ルートユーザーは/var/www/html
の下にフォルダを作成し、blog
ユーザーの下に書き込む権限を与えます。DockerfileでRUNコマンドの順序にどのように影響しますか?
USER blog
に続く次のRUNコマンドのセットでは、これらのコマンドは、blog
ユーザーがに書き込む許可を与えられた以前の状態を認識しません。このユーザーはそこでgit repoをクローンする必要がありますが、以前にこのユーザーのアクセス許可を設定していたにもかかわらず、新しいユーザーがそこに書き込めないため、エラーfatal: could not create leading directories of '/var/www/html/wp-content/uploads': Permission denied
が表示されます。ここで
は、私は、blog
ユーザーを作成自分のホームディレクトリにファイルをコピーし、このユーザーにレポのクローンを作成するために使用していたコマンドです:
ENV WORDPRESS_DB_USER=wp_blog \
WORDPRESS_DB_NAME=wp_blog \
WORDPRESS_DIR=/var/www/html \
TERM=xterm
# Setup the WordPress site user
# Preliminary command
RUN useradd --create-home --shell /bin/false --groups www-data blog
COPY id_rsa* known_hosts /home/blog/.ssh/
## First set of commands
RUN mkdir --parents "$WORDPRESS_DIR"/wp-content/uploads \
&& chown --recursive blog:blog "$WORDPRESS_DIR" \
&& chown --recursive blog:blog /home/blog
USER blog
## Second set of commands
RUN chmod u=rw,g=,o= /home/blog/.ssh/id_rsa \
&& chmod u=rw,g=r,o=r /home/blog/.ssh/id_rsa.pub \
&& chmod u=rw,g=r,o=r /home/blog/.ssh/known_hosts \
&& eval $(ssh-agent -s) \
&& ssh-add \
&& export PATH=$PATH:/usr/sbin \
# Use the WordPress user to download the content repo and hooks
# The following command results in a permissions error:
&& git clone [email protected]:jb-merideoux/jbm-uploads.git "$WORDPRESS_DIR"/wp-content/uploads \
&& mkdir --parents /home/blog/git/wpgithooks \
&& cd /home/blog/git/wpgithooks \
&& git clone [email protected]:enderandpeter/wpgithooks.git /home/blog/git/wpgithooks \
&& git checkout --git-dir=/home/blog/git/wpgithooks/.git --track origin/wpaddons \
&& chmod u+x /home/blog/git/wpgithooks/*.sh \
&& echo Run the script at /home/blog/git/wpgithooks/setup.sh to get started
blog
ユーザーがためのパーミッションを設定することができますコピーされたSSHキーのペアですが、chown --recursive blog:blog /home/blog
コマンドが存在しない場合はできません。以前のchown --recursive blog:blog "$WORDPRESS_DIR"
コマンドは、blog
ユーザーが同じコマンドセットでに書き込むことができるかどうかに等しい効果を持ちますと考えています。root
のユーザーはすべて下にすべてを確定した後、root
によって自宅にコピーされたファイルのアクセス許可を変更します/home/blog
はblog
が所有していました。何とかして、/home/blog
のアクセス許可は、2番目の実行コマンドセットでは有効ですが、/var/www/html
のアクセス許可には反映されません。私はtouch "$WORDPRESS_DIR"/wp-content/uploads/afile
のようなファイルを作成するために何かをgit clone
コマンドの前にすると、エラーがtouch: cannot touch '/var/www/html/wp-content/uploads/afile': No such file or directory
であるため、精密検査の際
、どちらかmkdir --parents "$WORDPRESS_DIR"/wp-content/uploads
命令が実行されていないように思われます。
私は(それはベースワードプレスコンテナによって作成されたため、すでに存在している)/var/www/html/
でafile
を作成しようとすると、私はchown --recursive blog:blog "$WORDPRESS_DIR"
コマンドが確認されなかったことを示す、エラーtouch: cannot touch '/var/www/html/afile': Permission denied
を取得します。最初のRUNステートメントセットの3つのコマンドのうち、2番目のRUNステートメントセットによって確認されたものはchown --recursive blog:blog /home/blog
のように見えます。
最初のRUN文の中のすべてのコマンドは、RUN文の第二セットは新規ユーザによって実行された時点で発行されているように、私はこのDockerfileを書くかもしれませんどのように?
このリンクを参照してください。許可の問題ではない可能性は非常に高いですが、sshキーの問題http://www.docunext.com/blog/2011/02/fatal-could-not-create-leading-directories-of-permission-denied.html –
助けてくれてありがとう!私は見てみましょう。私は別のStackOverflowの質問を見つけた。私は、第2セットのコマンドが発行されたときに、最初のコマンドセットのうちの1つだけが実行されたことを私に納得させるいくつかの観察で私の質問を編集した。 –