Điều này đang xảy ra do quyền của người dùng không khớp trong vùng chứa docker.
Liệt kê các tệp có liên quan trong vùng chứa:
$ docker exec <container> ls -l /var/lib/postgresql/data/pg_stat_tmp
-rw------- 1 root root [...] db_0.stat
-rw------- 1 root root [...] db_1.stat
-rw------- 1 root root [...] db_2.stat
-rw------- 1 postgres postgres [...] global.stat
chúng ta có thể thấy rằng tất cả db_*.stat
các tệp được sở hữu bởi root:root
, trong khi global.stat
thuộc sở hữu của postgres:postgres
.
Kiểm tra người dùng docker cung cấp cho chúng tôi:
$ docker exec <container> whoami
root
Vì vậy, chúng tôi muốn tất cả các tệp này thuộc quyền sở hữu của người dùng postgres. Thật may mắn, điều này khá dễ dàng! Chỉ cần đặt người dùng thành postgres
và khởi động lại!
Trong một tệp dockerfile:
USER postgres
Sử dụng docker-soạn:
services:
postgres:
image: postgres:13
user: postgres