我正在使用 postgres docker 映像,在使用 docker 映像中运行的数据库几个月后,现在我得到的行为是,在一段时间后,它们只是挂起。我可以执行bin/bash
但根本不能用 postgres 做任何事情;命令不会返回,容器也无法被关闭。甚至docker kill -s SIGKILL <container_id>
不起作用;需要重新启动 docker 服务器才能停止它们。
我能看到的唯一确凿证据是这样的消息:
WARNING: could not open statistics file "pg_stat_tmp/global.stat": Operation not permitted
在所有容器上。任何人有任何想法我都会非常感激,因为目前这正在扼杀一切。
发生这种情况是由于 docker 容器中的用户权限不匹配。
列出容器中的相关文件:
$ 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
我们可以看到所有的db_*.stat
文件的所有者是root:root
, while global.stat
属于postgres:postgres
.
检查 docker 用户为我们提供:
$ docker exec <container> whoami
root
因此,我们希望所有这些文件都归 postgres 用户所有。
幸运的是,这很容易!只需将用户设置为postgres
,然后重新启动!
在 dockerfile 中:
USER postgres
使用 docker-compose:
services:
postgres:
image: postgres:13
user: postgres
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)