我正在尝试使用 PostgreSQL 运行一个 docker 映像,该映像配置了一个用于持久数据的卷。
docker-compose.yml
version: '3.1'
services:
db:
image: postgres
restart: always
volumes:
- ./data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: example
当我启动容器时,我看到输出
修复现有目录 /var/lib/postgresql/data 的权限...好的
并且数据文件夹对我来说不再可读。
如果我提升自己并访问数据目录,我可以看到文件在那里。此外,命令ls -ld data
给我
drwx------ 19 systemd-coredump root 4096 May 17 16:22 data
我可以手动设置目录权限sudo chmod 755 data
,但这仅在我重新启动容器之前有效。
为什么会发生这种情况?我该如何解决?
另一个答案确实指出了问题的根本原因,但是它指向的帮助页面不包含解决方案。这是我想出的使这项工作对我有用的方法:
- 使用普通的 docker-compose 文件启动容器,这将创建具有硬编码 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:
从一开始就是如果映像以其他用户身份运行,则无法创建数据文件。
On the 图像文档页面 https://hub.docker.com/_/postgres,它确实提到了添加卷以暴露的解决方案/etc/passwd
提供时文件在图像中为只读--user
但是,该选项对我的最新图像不起作用,因为我收到以下错误。事实上,所提出的三个解决方案都不适合我。
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)