2017-12-12 30 views
0

以下のようなシンプルなtomcatドッカーファイルがあります。Docker Containerでのファイルのアクセス許可

FROM tomcat:7 
MAINTAINER *** 
COPY sample.war /opt/tomcat/webapps 
USER tomcat 
RUN chown -R tomcat:tomcat /tmp/ 
CMD ["catalina.sh", "run"] 

私はそれは私が私のサンプルアプリケーションは、tmpフォルダ内のいくつかのディレクトリを作成し、私は所有者がtomcatにあることを期待していますが、それは根のように見えます

tomcat tomcat Dec 11 08:04 tmp 

として許可をファイルに与えるドッキングウィンドウの画像を作成します。私はユーザーのTomcatとしてコンテナを実行しているので、どのようにこれらを作成するためにTomcatユーザーを使用するようにします。

答えて

0

あなたが提供して複数のエラーが発生したDockerfileをビルドして実行しようとしました。あなたの "アプリケーション"が作成するファイルのアクセス権について質問しています。だからここに私の出発点があります:

"app"はcatalina.shとします。 /tmp/にファイルを作成するプロセス。コンテナをユーザtomcatとして実行しているので、自動的にファイルのパーミッションに従ってファイルが作成されます。下記のコードコメントを見て、ここで何が起こっているのかについてさらに詳しい情報を入手してください。

Dockerfile

FROM httpd 
# I switched the image since you would need to configure tomcat to make it run 
# httpd works out of the box without any application specific config. That's why 

COPY ./catalina.sh/
RUN chmod +x /catalina.sh # copy your 'app'/entrypoint into the image 

RUN groupadd -r tomcat \ 
    && useradd -r -g tomcat tomcat 
# create a new user and group under which the container runs 
RUN chown -R tomcat:tomcat /tmp/ # change initial file permisisons. 
# So that our new user tomcat is allowed to access and fill the directory with files 

USER tomcat # switch the user under which the container runs 

ENTRYPOINT ["/catalina.sh"] 

catalina.sh

#!/bin/bash 

mkdir /tmp/test # create a dir 
touch /tmp/yolo.txt # and some files 
touch /tmp/test/yolo2.txt # to check the file permissions later on 

while true; do echo "sleep"; sleep 2; done 
# endless loop so that the container doesn't exit 

実行中のコンテナにファイルのパーミッションexecをチェックします。

docker exec -ti <container_name> bash

enter image description here

+0

'catalina.sh'はアプリケーションではありません。これはTomcatのスタートスクリプトです。 'catalina.sh run'はフォアグラウンドでtomcatを起動し、起動したコンソールにログを表示します。 Ctrl-Cを押すと、tomcatが終了します。 – adbo

+0

私はそれが違いはないと思う。 '' Dockerfile''に '' USER''指示文を指定すると、このコンテキストの下でコンテナを実行しています。したがって、 '' tomcat''が新しいファイルを作成するとき、関連するファイルのパーミッションを持ちます。同じ動作でなければなりません。イメージをtomcatに戻して、試してみてください。 –

-1

ドッカー通常root権限で実行されますので、私は(それが存在しない場合)は、ドッキングウィンドウ・グループを作成しなければならないと考えている、と(自分の場合はTomcatの、)ユーザーを追加しますドッカーグループ。

がドッキングウィンドウのグループを作成します。

は、グループをドッキングウィンドウにユーザーを追加する方法については、以下を参照してください。

$ sudo groupadd docker 

ユーザーをドッカーグループに追加します。

$ sudo usermod -aG docker tomcat 

参考:これによりhttps://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user

、私はあなたの問題を解決することができると信じています。

+0

投票の理由はどうぞ! – Anand

関連する問題