【发布时间】:2021-03-16 09:06:33
【问题描述】:
在我的 Windows 10 机器中,我有一个 Java 应用程序并使用以下配置在 Docker 上创建 Postgresql 图像:
docker-compose.yml:*
version: '2.0'
services:
postgresql:
image: postgres:11
ports:
- "5432:5432"
expose:
- "5432"
environment:
- POSTGRES_USER=demo
- POSTGRES_PASSWORD=******
- POSTGRES_DB=demo_test
我使用以下命令来合成图像:
cd postgresql
docker-compose up -d
虽然 pgadmin 容器在 Docker 上运行,但 postgres 容器通常处于重新启动状态,并且 sometines 似乎处于运行状态一秒钟。当我查看该容器日志时,我发现我遇到了以下错误:
2021-03-16 09:00:18.526 UTC [82] 致命:数据目录“/data/postgres”的所有权错误
2021-03-16 09:00:18.526 UTC [82] 提示:服务器必须由拥有数据目录的用户启动。
子进程以退出代码 1 退出
*initdb: 删除数据目录“/data/postgres”的内容
正在运行引导脚本...属于该数据库系统的文件将归用户“postgres”所有。 此用户还必须拥有服务器进程。
我已尝试应用几个解决方法建议,例如PostgreSQL with docker ownership issue,但它们都不起作用。那么,我该如何解决这个问题呢?
更新:这是我的docker-compoese.yml 文件的最后状态:
version: '2.0'
services:
postgresql:
image: postgres:11
container_name: "my-pg"
ports:
- "5432:5432"
expose:
- "5432"
environment:
- POSTGRES_USER=demo
- POSTGRES_PASSWORD=******
- POSTGRES_DB=demo_test
volumes:
- psql:/var/lib/postgresql/data
volumes:
psql:
【问题讨论】:
-
您可以尝试使用命名卷,它还具有在两次重启之间保持数据库的附加效果。当然,docker 用户应该有权写入您用于这些卷的目录。
-
同意,将数据目录放在容器外,并带有一个卷,指定的那个将不存在于容器中。
-
@Thomas 是的,但是怎么做?请问有什么例子吗?
-
@jr593 你同意什么? 为什么不发布您的建议作为答案?
-
"为什么不发布您的建议作为答案?" - 好吧,在某些情况下,这只是一个建议而不是答案,因此它可能不完整,甚至不是正确的轨道(即使我们没有明确的答案,我们也会努力提供帮助 - 至少我会这样做使用 cmets)。对我来说,“试试这个”不值得回答,因为它可能对您的情况有所帮助,也可能无济于事,而在您可能被误导或分心之后出现的其他情况。
标签: java windows postgresql docker docker-compose