WordPress:docker-composeでコンテナを一般ユーザーで起動する

Docker 公式の WordPress イメージで WordPress を立ち上げますと、WordPress や Mysql が root や www-data で稼働します。これですと新しくサイトを開発しようにもいちいち root に入らなくてはならなくなります。これをホストの一般ユーザーで稼働させられないかということです。



現在うまくいっている方法

現時点では、Docker そのものもあまり理解していない状態で、Docker ドキュメントのクイックスタートで WordPress を立ち上げてなんとかしようとしているという段階です。


コンテナを一般ユーザーで稼働させる

  • docker-compose.yml で WordPress と Mysql コンテナを立ち上げる
  • 通常通り、WordPress をインストールする
  • いったんコンテナを停止する
  • WordPress と Mysql インストールディレクトリの uid と gid をホストと同じ一般ユーザーに書き換える
  • docker-compose.yml に user: 指定を追加し WordPress と Mysql を立ち上げる


現在のところこれでうまくいっています。


docker-compose.yml

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - ~/Dropbox/Docker/****/mysql:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     user: "1000:1000"

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     volumes:
       - ~/Dropbox/Docker/****/html:/var/www/html
     user: "1000:1000"


docker-compose.yml ファイルはクイックスタートのものから、wordpress と mysql のマウントを Dropbox 内のディレクトリに変えています。これは、作業する場所が複数ですのでデータを共用するためです。


uid と gid はデフォルトで作成されるユーザーを指定しています。id コマンドで調べられます。または、プロジェクトディレクトリに .env ファイルを作成して docker-compose.yml には ${UID}:${GID} を指定しておいても同じことです。


.env ファイル

UID=1000
GID=1000


docker-compose.yml ファイル

user: "${UID}:${GID}"


実際にやってみる

コンテナを立ち上げる

f:id:ausnichts:20220220210217p:plain

プロジェクトディレクトリの docker-compose.yml からコンテナを立ち上げます。

php.ini と phpmyadmin-misc.ini は今回は関係ありません。WordPress サイトや Mysql ディレクトリの所有者が www-data や systemd-coredump になっています。


WordPress をインストールする

ブラウザで http://localhost:8000 にアクセスしますと WordPress のインストールページになりますのでインストールします。


f:id:ausnichts:20220220210937j:plain

f:id:ausnichts:20220220211018j:plain

f:id:ausnichts:20220220211027j:plain


ディレクトリの所有者を一般ユーザーに変更する

f:id:ausnichts:20220220211728p:plain

WordPress と Mysql をいったん停止、マウントしたディレクトリの所有者とグループを一般ユーザーに変更します。そして、docker-compose.yml の user に一般ユーザーを指定して、再度コンテナを立ち上げます。


一般ユーザーで稼働しているか確認する

f:id:ausnichts:20220221172342j:plain

問題なく立ち上がりました。WordPress の更新がありますので更新してみます。


f:id:ausnichts:20220221172404j:plain

f:id:ausnichts:20220221172429j:plain

f:id:ausnichts:20220221172446j:plain

更新できました。


f:id:ausnichts:20220221172503j:plain

プラグインの更新もしてみます。


f:id:ausnichts:20220221172519j:plain

f:id:ausnichts:20220221172548j:plain

テーマも更新してみます。


f:id:ausnichts:20220221172644j:plain

これでホストのログインユーザーのままでファイルの変更もできています。