我正在尝试使用PostgreSQL运行一个码头映像,该映像配置了一个卷,用于持久化数据。
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手动设置目录权限,但只能在重新启动容器之前才能使用。
为什么会发生这种事,我该怎么解决呢?
发布于 2021-03-06 04:44:35
另一个答案确实指出了问题的根源,但是它所指向的帮助页并不包含解决方案。下面是我想出的办法,让这件事为我服务:
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$ docker stop postgres
$ sudo chown -R 1000:1000 ./data 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:的原因是,如果映像作为不同的用户运行,它就无法创建数据文件。
在图像文档页上,它确实提到了添加一个卷的解决方案,以便在提供--user选项时将/etc/passwd文件公开为只读文件,但是,对于最新的映像,这并不适用,因为我得到了以下错误。事实上,所提出的三种解决办法中没有一种对我有用。
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted发布于 2019-05-17 14:53:54
发布于 2022-05-12 08:20:58
一个更容易和持久的解决办法如下:
将这些行添加到~/.bashrc
export UID=$(id -u)
export GID=$(id -g)重新加载外壳:
$ source ~/.bashrc修改您的docker-compose.yml如下:
version: "3.7"
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
user: "${UID}:${GID}"
...https://stackoverflow.com/questions/56188573
复制相似问题