Docker 公式の WordPress イメージで WordPress を立ち上げますと、WordPress や Mysql が root や www-data で稼働します。これですと新しくサイトを開発しようにもいちいち root に入らなくてはならなくなります。これをホストの一般ユーザーで稼働させられないかということです。
01現在うまくいっている方法
現時点では、Docker そのものもあまり理解していない状態で、Docker ドキュメントのクイックスタートで WordPress を立ち上げてなんとかしようとしているという段階です。
コンテナを一般ユーザーで稼働させる
- docker-compose.yml で WordPress と Mysql コンテナを立ち上げる
- 通常通り、WordPress をインストールする
- いったんコンテナを停止する
- WordPress と Mysql インストールディレクトリの uid と gid をホストと同じ一般ユーザーに書き換える
- docker-compose.yml に
user:
指定を追加し WordPress と Mysql を立ち上げる
現在のところこれでうまくいっています。
02docker-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}"
03実際にやってみる
コンテナを立ち上げる
プロジェクトディレクトリの docker-compose.yml からコンテナを立ち上げます。
php.ini と phpmyadmin-misc.ini は今回は関係ありません。WordPress サイトや Mysql ディレクトリの所有者が www-data や systemd-coredump になっています。
WordPress をインストールする
ブラウザで http://localhost:8000
にアクセスしますと WordPress のインストールページになりますのでインストールします。
ディレクトリの所有者を一般ユーザーに変更する
WordPress と Mysql をいったん停止、マウントしたディレクトリの所有者とグループを一般ユーザーに変更します。そして、docker-compose.yml の user に一般ユーザーを指定して、再度コンテナを立ち上げます。
一般ユーザーで稼働しているか確認する
問題なく立ち上がりました。WordPress の更新がありますので更新してみます。
更新できました。
プラグインの更新もしてみます。
テーマも更新してみます。
これでホストのログインユーザーのままでファイルの変更もできています。