web-dev-qa-db-ja.com

公式wordpress docker-composeの画像を使用してwp-contentのファイル権限を修正する方法

問題


Docker-composeとDockerリポジトリからの公式のWordpressイメージを使用してwordpressローカル環境を設定しています。

私はWindowsを使用しています。

問題は、wpコンテンツでいくつかの権限の問題があり、Wordpress管理パネルからファイルをアップロードできないことです。 wordpress error unable to create directory

私がすでにやったこと


次に、コンテナー内のファイルのアクセス許可を確認しました。これが出力です。

file permissions in the wordpress container

ご覧のとおり、私の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後にコマンドを実行する方法があります
この問題を解決するより良い方法を他に知っていますか?

10
Danny_DD

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"]
1
junsenbrnr

これは、WordPress Dockerイメージの作成方法が原因です。

ボリュームを使用して共有されている場合(またはそのサブフォルダーの一部)、wp-contentフォルダーがwww-dataに属するように Pull Request を作成しました。

マージする前に(ある場合)、独自のWordPress Dockerイメージを作成して変更を統合します。- https://github.com/ docker-library/wordpress (PHPバージョンを選択してから、Webサーバーパラメータを選択してください)。

  1. プロジェクトにdocker/wordpressフォルダを作成します。
  2. 2つの未加工ファイル(Dockerfileおよびdocker-entrypoint.sh)をコピーします) GitHubからそのフォルダーに。
  3. docker-entrypoint.shの次の行を置き換えます。
        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
1
Michaël Perrin