Docker-composeとDockerリポジトリからの公式のWordpressイメージを使用してwordpressローカル環境を設定しています。
私はWindowsを使用しています。
問題は、wpコンテンツでいくつかの権限の問題があり、Wordpress管理パネルからファイルをアップロードできないことです。
次に、コンテナー内のファイルのアクセス許可を確認しました。これが出力です。
ご覧のとおり、私のwp-content
の所有者はwww-data
ではなくroot
です。
当面の解決策は、コンテナのbashを開いて与えることですchown -R www-data:www-data /var/www/html/wp-content/
これはもちろん機能しますが、新しいwordpressプロジェクトを開始するたびにこのプロセスを実行したくありません。これを実現するために、次のようにDockerfile
を作成しました。
FROM wordpress:5.1.1
# install dos2unix (fix problem between CRLF and LF)
RUN apt-get update
RUN apt-get install -y dos2unix
# increase upload limit
RUN touch /usr/local/etc/php/conf.d/uploads.ini \
&& echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini
# fix permissions issues
COPY entrypoint.sh /
RUN dos2unix /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
そして、私のentrypoint.sh
は次のようになります。
#!/bin/bash
echo Fixing permissions...
chown -R www-data:www-data /var/www/html/wp-content/
しかし、元のwordpress画像のENTRYPOINT
を上書きしていることに気付き、コンテナは常にcode 0
で終了しました。
次に、CMD
の代わりにENTRYPOINT
を試し、Dockerfile
を次のように変更しました。
FROM wordpress:5.1.1
# increase upload limit
RUN touch /usr/local/etc/php/conf.d/uploads.ini \
&& echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini
CMD chown -R www-data:www-data /var/www/html/wpcontent/
しかし、ファイルまたはフォルダが存在しないというエラーが常に表示されます。
私もCMD
を次のように使用しようとしました:CMD ["chown", "-R", "www-data:www-data", "/var/www/html/wp-content/"]
しかし成功せず。
元のENTRYPOINT
?後にコマンドを実行する方法があります
この問題を解決するより良い方法を他に知っていますか?
Dockerのドキュメントから、使用する必要があるコマンドはRUN
です。
RUNとCMDを混同しないでください。 RUNは実際にコマンドを実行し、結果をコミットします。 CMDはビルド時に何も実行しませんが、イメージの目的のコマンドを指定します。
したがって、Dockerfileの行は次のようになります:RUN chown -R www-data:www-data /var/www/html/wp-content
また、作成されるレイヤーの数と画像のサイズを減らすために、RUN
コマンドをできるだけ多く連結します。例(テストされていません):
FROM wordpress:5.1.1
# install dos2unix (fix problem between CRLF and LF) and increase upload limit
RUN apt-get update -y && \
apt-get install -y dos2unix && \
touch /usr/local/etc/php/conf.d/uploads.ini \
&& echo "upload_max_filesize = 10M;" >> /usr/local/etc/php/conf.d/uploads.ini && \
chown -R www-data:www-data /var/www/html/wp-content
# fix permissions issues
COPY entrypoint.sh /
RUN dos2unix /entrypoint.sh && \
chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
これは、WordPress Dockerイメージの作成方法が原因です。
ボリュームを使用して共有されている場合(またはそのサブフォルダーの一部)、wp-content
フォルダーがwww-data
に属するように Pull Request を作成しました。
マージする前に(ある場合)、独自のWordPress Dockerイメージを作成して変更を統合します。- https://github.com/ docker-library/wordpress (PHPバージョンを選択してから、Webサーバーパラメータを選択してください)。
docker/wordpress
フォルダを作成します。 if [ "$(id -u)" = '0' ] && [ "$(stat -c '%u:%g' .)" = '0:0' ]; then
chown "$user:$group" .
fi
沿って:
if [ "$(id -u)" = '0' ]; then
chown -R "$user:$group" .
fi