カテゴリー
Linux

Docker Compose で WordPress コンテナをボリューム共有して使おうとしたらアップデートができなくなった問題を解決する方法

テーマディレクトリを共有して困ったこと

  • WordPress インストール時に、言語の選択ができない。
  • WordPress 本体、プラグイン、テーマのアップデートができない。

解決方法

  • 共有したテーマのディレクトリを、Apache の実行ユーザー・グループの所有に変更すれば良い。
  • docker-compose exec -T wordpress chown -R www-data:www-data /var/www/html/ をホストから実行する。

原因

テーマを開発するための環境として、 WordPress 公式の Docker コンテナを使用していました。

このページの、 "… via docker stack deploy or docker-compose" の内容をほぼそのまま使いました。

開発中のテーマ、ここでは childtheme と名付けましょう、ディレクトリを、 WordPress の Docker コンテナの /var/www/html/wp-content/theme/childtheme にマウントしてボリューム共有していました。 docker-compose.yml は次のようになります。

    volumes:
      - ../childtheme:/var/www/html/wp-content/theme/childtheme

これが、原因です。

コンテナに入って確認してみますと、 childtheme ディレクトリの所有者は root 、それ以外の WordPress 関係のディレクトリ・ファイルの所有者は www-data です。

この不揃いが、アップデートできない原因でした。以前にも対処したことがございます。

対処の解説

したがって、ボリューム共有しているディレクトリの所有者を WordPress の実行ユーザ・グループに合わせてやれば良いです。

解決方法として、ボリューム共有したディレクトリを、 WordPress の実行ユーザ・グループへ合わせるようにしました。

そのために、 Docker を起動している、ホストマシンで次のコマンドを実行しました。

docker-compose exec -T wordpress chown -R www-data:www-data /var/www/html/

内容は、すでに起動している wordpress コンテナの内部に対し、 chown 以下のコマンドを実行する、というものです。 -T オプションをつけており、 tty を無効にしているのがポイントです。

chown を実行完了したら、ホストに戻ってきてコンテナ内部とのやり取りは終了しますので、つけなくとも今回は問題は表面化しませんけれども、一応 -T をつけておきました。

脱線しますけれども、 -T をつけなければならない状況として、 cron で動かすシェルスクリプトに今回のようなコマンドを書いた場合があります。つけないと、エラーで終了してしまいました。

補足

Mac で作業しております。解決方法を実施後、ターミナルでファイル等の情報を確認しますと次のように変化しました。 パーミッションの右側に、 "@" が付加されています。

$ ls -al
total 80
drwxr-xr-x@  8 oki2a24  staff    256  2 27 08:16 ./
drwxr-xr-x+ 33 oki2a24  staff   1056  2 28 07:44 ../
drwxr-xr-x@ 15 oki2a24  staff    480  2 28 07:01 .git/
-rw-r--r--@  1 oki2a24  staff  18092  2 23 16:43 LICENSE
-rw-r--r--@  1 oki2a24  staff    110  2 23 16:43 README.md
-rw-r--r--@  1 oki2a24  staff   1398  2 25 07:50 footer.php
-rw-r--r--@  1 oki2a24  staff   4386  2 27 08:16 functions.php
-rw-r--r--@  1 oki2a24  staff    279  2 27 08:11 style.css

これは一体なんなのでしょうか?

を頼りに調べてみますと、わかりました。

$ ls -al@
total 80
drwxr-xr-x@  8 oki2a24  staff    256  2 27 08:16 ./
	com.docker.owner	    7 
drwxr-xr-x+ 33 oki2a24  staff   1056  2 28 07:44 ../
drwxr-xr-x@ 15 oki2a24  staff    480  2 28 08:16 .git/
	com.docker.owner	    7 
-rw-r--r--@  1 oki2a24  staff  18092  2 23 16:43 LICENSE
	com.docker.owner	    7 
-rw-r--r--@  1 oki2a24  staff    110  2 23 16:43 README.md
	com.docker.owner	    7 
-rw-r--r--@  1 oki2a24  staff   1398  2 25 07:50 footer.php
	com.docker.owner	    7 
-rw-r--r--@  1 oki2a24  staff   4386  2 27 08:16 functions.php
	com.docker.owner	    7 
-rw-r--r--@  1 oki2a24  staff    279  2 27 08:11 style.css
	com.docker.owner	    7 

@ は拡張属性というものだそうですけれども、どうやら Docker の物でもある、という属性が追加されたようです。

おわりに

公式ページに例もあるし、 Docker で WordPress コンテナを使うのは簡単だろうとたかをくくっていました。

確かに、起動してちょっと動かすだけなら簡単でした。。。しかし、ちょっとディレクトリ共有しようとしたら、はまってしまいました。

今回は、そんな苦労を乗り越えた記録でした。

なお、作ったリポジトリは以下となります。

以上です。

コメントを残す