私はSymfony
アプリのDockerイメージを構築しており、Apacheサーバーにキャッシュおよびログフォルダーへの書き込みを許可する必要があります
#Dockerfile
FROM php:7-Apache
RUN apt-get update \
&& apt-get install -y libicu-dev freetds-common freetds-bin unixodbc \
&& docker-php-ext-install intl mbstring \
&& a2enmod rewrite
COPY app/php.ini /usr/local/etc/php/
COPY app/Apache2.conf /etc/Apache2/Apache2.conf
COPY ./ /var/www/html
RUN find /var/www/html/ -type d -exec chmod 755 {} \;
RUN find /var/www/html/ -type f -exec chmod 644 {} \;
RUN chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs
docker build -t myname/symfony_apps:latest .
でこのイメージをビルドし、docker run -p 8080:80 myname/symfony_apps:latest
でコンテナを実行すると、 Apacheログは、アクセス許可拒否エラーで溢れ、私がls -a
で確認した奇妙なことと、アクセス許可は問題ありません。コンテナのbashからchmodを実行すると、Apacheのアクセス許可の問題がなくなり、アプリは正常に動作します
状況
dockerfile:からのchmodコマンドの実行:権限が変更されましたが、Apacheは依然として権限の拒否について不満を述べています。 コンテナー内でbashを使用してchmod同じコマンドを実行:権限が変更され、アプリが実行されています
任意のアイデア、何か不足していますか、Dockerfileのどこかにrootユーザーを追加する必要がありますか?
同じ問題があり、ディレクトリコンテンツが1つのレイヤーで作成され、そのアクセス許可が他のレイヤーで変更された場合、dockerまたはoverlay2にいくつかのバグがあるようです。
回避策として、ソースを一時ディレクトリにコピーできます。
COPY . /src
次に、それを/var/www/html
に移動し、(1つのRUN
コマンドで)権限を設定します。
RUN rm -rf /var/www/html && mv /src /var/www/html &&\
find /var/www/html/ -type d -exec chmod 755 {} \; &&\
find /var/www/html/ -type f -exec chmod 644 {} \; &&\
chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs
また、私は GitHub issue を作成しました。
DockerでのRUNのデフォルトのシェルは/ bin/shであり、これは実際に正しく設定されていないアクセス許可に問題がある場所です。
しかし、/ bin/bashを使用するように変更して簡単に修正できます。ディレクトリリストの前後に注意してください
Step 7/9 : RUN /bin/bash -c 'ls -la; chmod +x gitlab-properties-builder.sh; ls -la'
---> Running in dc57ae77aa67
drwxr-xr-x. 3 root root 103 Mar 8 17:56 .
drwxr-xr-x. 1 root root 46 Mar 8 17:57 ..
drwxr-xr-x. 2 root root 6 Mar 7 20:47 config
-rw-r--r--. 1 root root 2340 Mar 7 21:20 gitlab-properties-builder.sh
-rw-r--r--. 5 root root 57325770 Mar 5 14:39 gitlab-scm-collector-2.0.5-SNAPSHOT.jar
drwxr-xr-x. 1 root root 42 Mar 8 17:56 .
drwxr-xr-x. 1 root root 61 Mar 8 17:57 ..
drwxr-xr-x. 2 root root 6 Mar 7 20:47 config
-rwxr-xr-x. 1 root root 2340 Mar 7 21:20 gitlab-properties-builder.sh
-rw-r--r--. 5 root root 57325770 Mar 5 14:39 gitlab-scm-collector-2.0.5-SNAPSHOT.jar
---> 8b5de6e348d3
追加してみてください:
USER root
それは私のために働いた。
この問題は、上流のDockerfile内のVOLUME
定義の結果である可能性があります。ボリュームがDockerfileで定義されている場合、COPY
またはADD
コマンドを使用してファイルをイメージに直接追加できます。ただし、RUN
行は次のようになります。
RUN
コマンドの実行中にディレクトリを一覧表示すると、適用された変更が表示されますが、それらの変更はボリュームに適用されていますdocker diff
で確認できます(--rm=false
を使用してビルドを実行し、それらを残すことができます)この動作のため、次のオプションがあります。
現在のphp画像内では、ボリュームが削除されているように見えることに注意してください。これは、事実上、オプション3があることを意味しています。
私は次のことを試してみました:
FROM Alpine
LABEL MAINTAINER="YIMGA YIMGA Salathiel Genèse"
RUN apk add --no-cache inotify-tools
CMD [ "./script.sh" ]
WORKDIR /opt/app/
COPY src/ /opt/app/
RUN chmod a+x *.sh
そして、それはうまく機能します。
Docker-composeボリュームを介してその実行可能ファイルをオーバーライドすると、execute
権限は単にロールバックされたようになり、技術的に元のファイル権限にオーバーライドされます。
開発モードの修正は単にchmod a+x yourfile
Hostから。これは、構成ボリュームのマウント時に継承されます。