1. ホーム
  2. linux

[解決済み] Docker compose ボリューム パーミッション linux

2022-03-06 21:17:15

質問

ワードプレスをドッカーコンテナで実行しようとしたところ docker-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 構造体を構築すると、ボリュームはマウントされますが、root に所属しています。

で変更しようとしたのですが

my-wp:
  image: wordpress
  user: 1000:1000    # added
  volumes:
    - ./:/var/www/html
  ports:
    - "8080:80"
  links:
    - my-wpdb:mysql
  environment:
    WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant

これで、ファイルの編集ができるようになりました。しかし、その後、コンテナはもうウェブサイトを提供しません。

このパーミッションの問題を解決する正しい方法は何でしょうか?

どのように解決するのですか?

によると ドッカーコンポーズ ドッカーラン を参照すると 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 に変更し、ポート 8080 をリッスンするようにし、ルーティングを

 ports:
    - "8080:8080"