Dockerコンテナでwordpressを実行しようとしていますmydocker-compose.yaml
ファイルは次のとおりです。
version: "2"
services:
my-wpdb:
image: mariadb
ports:
- "8081:3306"
environment:
MYSQL_ROOT_PASSWORD: ChangeMeIfYouWant
my-wp:
image: wordpress
volumes:
- ./:/var/www/html
ports:
- "8080:80"
links:
- my-wpdb:mysql
environment:
WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant
Docker構造を構築すると、ボリュームはマウントされますが、ルートに属します。
私はそれを次のように変更しようとしました:
my-wp:
image: wordpress
user: 1000:1000 # added
volumes:
- ./:/var/www/html
ports:
- "8080:80"
links:
- my-wpdb:mysql
environment:
WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant
これでファイルを編集できます。しかし、その後、コンテナはWebサイトを提供しなくなります。
この許可の問題を解決する正しい方法は何ですか?
docker-compose および docker run の参照によると、user
オプションは、コンテナーで実行されているプロセスのユーザーID(およびグループID)を設定します。これを1000:1000
に設定すると、Webサーバーはポート80にバインドできなくなります。 1024未満のポートにバインドするには、root権限が必要です。これは、追加されたuser: 1000:1000
ステートメントを再度削除する必要があることを意味します。
共有ボリュームのアクセス許可の問題を解決するには、ディレクトリの所有権を変更する必要があります。 chown 1000:1000 /path/to/volume
を実行します。これは、コンテナ内で実行することも、ホストシステムで直接実行することもできます。変更は永続的ですぐに有効になります(コンテナーを再起動する必要はありません)。
一般的に、ボリュームはサブディレクトリにあるべきだと思います。
volumes:
- ./public:/var/www/html
正しいユーザーが./public
を所有していることを確認してください。コンテナを起動し、ディレクトリが存在しない場合、dockerがコンテナを作成します。この場合、ディレクトリはroot
によって所有されており、上記で説明したように手動で所有権を変更する必要があります。
または、非特権ユーザー(user: 1000:1000
)としてWebサーバーを実行し、サーバーにポート8080でリッスンさせ、ルーティングを次のように変更することもできます。
ports:
- "8080:8080"
Google Cloud Shellを使用していたところ、次のコマンドを使用すると、WordPress dockerコンテナでFTPファイルアクセスを使用するための正しい権限が有効になりました。
Sudo chmod 777 -R wordpress-docker-compose