1. ホーム
  2. docker

[解決済み] Dockerfileの "RUN chmod "が有効でない。

2022-02-18 06:32:24

質問

他のものは全て有効になりますが、パーミッションが変更されません。何か見落としているのでしょうか?

FROM joomla:3.9-php7.2-apache

RUN apt-get update \
&& apt-get install -y apt-utils vim curl

COPY ./joomla_html /var/www/html

RUN chmod -R 765 /var/www/html/

RUN chown -R www-data. /var/www/html/
RUN chmod -R 777 /var/www/html/tmp
RUN chmod -R 777 /tmp
RUN chmod -R 777 /var/www/html/modules
RUN chmod -R 777 /var/www/html/components
RUN chmod -R 777 /var/www/html/administrator/logs
RUN chmod -R 777 /var/www/html/images
RUN chmod -R 777 /var/www/html/uploads

COPY ./docker/php.ini /usr/local/etc/php/conf.d/php-extras.ini

EXPOSE 80


これは私が得たものです、すべてのファイルのパーミッションは1000:1000です、私はそれがwww-dataにあることが必要です。

ls -la /var/www/html の出力は以下の通りです。

total 144
drwxr-xr-x 19 1000 1000 4096 May 8 18:53 .
drwxr-xr-x 1 root root 4096 May 8 02:30 ..
drwxr-xr-x 25 1000 1000 4096 May 8 18:53 components
drwxr-xr-x 6 1000 1000 4096 May 8 18:53 images
drwxr-xr-x 68 1000 1000 4096 May 8 18:53 modules
drwxr-xr-x 2 1000 1000 4096 May 8 18:53 tmp
drwxr-xr-x 2 1000 1000 4096 May 8 18:53 uploads

解決方法は?

ディレクトリが上流のボリュームとして定義されています。 https://github.com/joomla/docker-joomla/blob/d34ff24288dfb5b27a167f870f1fcca56077be78/php7.2/apache/Dockerfile#L64

VOLUME /var/www/html

ボリュームはRUNコマンドで変更することはできません。ボリュームを持つ一時的なコンテナで起動し、ボリュームではなくコンテナへの変更のみが保存されます。

上流のレポに、Dockerfile からボリューム定義を削除するようにイメージを変更するように頼んでみてはいかがでしょうか。あるいは、上流のレポを引っ張ってきて、ボリュームを除いたベースイメージの独自のバージョンをビルドすることもできます。どちらも、後でそのディレクトリにボリュームがある状態でコンテナを実行することを妨げるものではありません。

そうでない場合、イメージを拡張してRUNコマンドで変更を加えたい場合は、別のディレクトリにファイルを保存する必要があります。また、コンテナ起動時にこれらのファイルを /var/www/html にコピーするエントリーポイントを用意することも可能です。

また、最初のステージでパーミッションを修正し、リリースステージでファイルを直接ボリュームにコピーする、マルチステージビルドを検討することも可能です。お気づきのように、COPYはまだボリュームで動作します。一時的なコンテナで実装されているわけではないので、イメージファイルシステムに直接ファイルを配置することができます。