2016-03-23 19 views
0

私は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/blogblogが所有していました。何とかして、/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を書くかもしれませんどのように?

+0

このリンクを参照してください。許可の問題ではない可能性は非常に高いですが、sshキーの問題http://www.docunext.com/blog/2011/02/fatal-could-not-create-leading-directories-of-permission-denied.html –

+0

助けてくれてありがとう!私は見てみましょう。私は別のStackOverflowの質問を見つけた。私は、第2セットのコマンドが発行されたときに、最初のコマンドセットのうちの1つだけが実行されたことを私に納得させるいくつかの観察で私の質問を編集した。 –

答えて

0

うわー、それは激しかったです。コマンドの第2のセットは、あらかじめ実行されたことを決して拾わない。私は、その後のRUNコマンドは以前のもので起こった事を認識している例を見てきましたので、私はそれが決定されただけでどのように、まだはっきりしていませんよ。私が見つけた

ソリューションは、ルートディレクトリを作成し、アクセス権を設定した直後に、コマンドの最初のセットでsuを使用していた:

RUN mkdir --parents "$WORDPRESS_DIR"/wp-content/uploads \ 
    && chown --recursive blog:blog "$WORDPRESS_DIR" \ 
    && chown --recursive blog:blog /home/blog \ 
    && su - blog -s /bin/bash -c '\ 
     chmod u=rwx,g=,o= /home/blog/.ssh \ 
     && chmod u=rw,g=,o= /home/blog/.ssh/id_rsa \ 
... 
    && git clone [email protected]:jb-merideoux/jbm-uploads.git '"$WORDPRESS_DIR"'/wp-content/uploads \ 
... 
    && echo '"$WORDPRES_DIR"' setup complete.' 

あなたが見ることができるように、それはいくつかの非常識な引用ですが、幸いにも次のことができますDockerfileにまっすぐに与えられたかのようにコマンドをフォーマットします。私は以前のものに依存しないことを行うことは非常に終わりUSER blogを使用しましたが、私はドッカーと時々思い、あなたが持っている文字列へのコマンドの全体の束を一緒に、私はおそらく別のスクリプトにこのすべてを取得することができます...

関連する問題