Другият отговор наистина сочи основната причина за проблема, но помощната страница, към която сочи, не съдържа решение. Ето какво измислих, за да направя това да работи за мен:
- стартирайте контейнера, като използвате вашия нормален файл за съставяне на докери, това създава директорията с твърдо кодирания 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
опция обаче, която не работи за мен с най-новото изображение, тъй като получавах следната грешка. Всъщност нито едно от трите предложени решения не работи за мен.
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted