他の答えは確かに問題の根本的な原因を示していますが、それが指しているヘルプページには解決策が含まれていません。これが私のためにこの仕事をするために私が思いついたものです:
- 通常のdocker-composeファイルを使用してコンテナを起動します。これにより、ハードコードされたuid:gid(999:999)でディレクトリが作成されます
version: '3.7'
services:
db:
image: postgres
container_name: postgres
volumes:
- ./data:/var/lib/postgresql/data
environment:
POSTGRES_USER: fake_database_user
POSTGRES_PASSWORD: fake_database_PASSWORD
- コンテナを停止し、所有権を必要なuid:gidに手動で変更します(この例では1000:1000を使用します
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data
- dockerファイルを編集して目的のuid:gidを追加し、docker-composeを使用して再起動します(
user:
に注意してください) )
version: '3.7'
services:
db:
image: postgres
container_name: postgres
volumes:
- ./data:/var/lib/postgresql/data
user: 1000:1000
environment:
POSTGRES_USER: fake_database_user
POSTGRES_PASSWORD: fake_database_password
user:
だけを使用できない理由 最初から、イメージが別のユーザーとして実行されている場合、データファイルの作成に失敗します。
画像ドキュメントページ
、/etc/passwd
を公開するボリュームを追加するソリューションについては言及されています --user
を指定すると、画像内で読み取り専用としてファイル ただし、次のエラーが発生したため、最新の画像では機能しませんでした。実際、提案された3つの解決策のどれも私にはうまくいきませんでした。
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted