web-dev-qa-db-ja.com

Docker構成ボリュームパーミッションlinux

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サイトを提供しなくなります。

この許可の問題を解決する正しい方法は何ですか?

4
linus heinz

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"
4
sauerburger

Google Cloud Shellを使用していたところ、次のコマンドを使用すると、WordPress dockerコンテナでFTPファイルアクセスを使用するための正しい権限が有効になりました。

Sudo chmod 777 -R wordpress-docker-compose
0
Dr Mulla