Jawaban lain memang menunjuk ke akar penyebab masalah, namun halaman bantuan yang ditunjuknya tidak berisi solusi. Inilah yang saya buat untuk membuat ini bekerja untuk saya:
- mulai wadah menggunakan file komposisi buruh pelabuhan normal Anda, ini membuat direktori dengan hardcoded 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
- hentikan penampung dan ubah kepemilikannya secara manual menjadi uid:gid yang Anda inginkan (saya akan menggunakan 1000:1000 untuk contoh ini
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data
- Edit file buruh pelabuhan Anda untuk menambahkan uid:gid yang Anda inginkan dan mulai lagi menggunakan komposisi buruh pelabuhan (perhatikan
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
Alasan Anda tidak bisa menggunakan user:
dari awal adalah bahwa jika gambar dijalankan sebagai pengguna yang berbeda, ia gagal membuat file data.
Di halaman dokumentasi gambar
, itu menyebutkan solusi untuk menambahkan volume untuk mengekspos /etc/passwd
file sebagai hanya-baca pada gambar saat memberikan --user
opsi, bagaimanapun, itu tidak berfungsi untuk saya dengan gambar terbaru, karena saya mendapatkan kesalahan berikut. Faktanya, tidak satu pun dari tiga solusi yang diusulkan berhasil untuk saya.
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted