Câu trả lời khác thực sự chỉ ra nguyên nhân gốc rễ của vấn đề, tuy nhiên trang trợ giúp mà nó trỏ đến không chứa giải pháp. Đây là những gì tôi đã nghĩ ra để làm cho công việc này phù hợp với tôi:
- khởi động vùng chứa bằng cách sử dụng tệp soạn nhạc do docker thông thường của bạn, thao tác này sẽ tạo thư mục có uid được mã hóa cứng: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
- dừng vùng chứa và thay đổi thủ công quyền sở hữu thành uid:gid bạn muốn (tôi sẽ sử dụng 1000:1000 cho ví dụ này
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data
- Chỉnh sửa tệp docker của bạn để thêm uid:gid mong muốn của bạn và khởi động lại bằng docker -omp (lưu ý người dùng
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
Lý do bạn không thể chỉ sử dụng user:
ngay từ đầu là nếu hình ảnh chạy với tư cách người dùng khác, nó không thể tạo tệp dữ liệu.
Trên trang tài liệu hình ảnh
, nó đề cập đến một giải pháp để thêm một khối lượng để hiển thị /etc/passwd
tệp ở dạng chỉ đọc trong hình ảnh khi cung cấp --user
Tuy nhiên, tùy chọn đó không hoạt động với tôi với hình ảnh mới nhất, vì tôi gặp lỗi sau. Trên thực tế, không có giải pháp nào trong ba giải pháp được đề xuất phù hợp với tôi.
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted