Java 无法在Docker上运行或连接Portgresql容器
在我的Windows 10机器中,我有一个Java应用程序,并使用以下配置在Docker上创建Java 无法在Docker上运行或连接Portgresql容器,java,windows,postgresql,docker,docker-compose,Java,Windows,Postgresql,Docker,Docker Compose,在我的Windows 10机器中,我有一个Java应用程序,并使用以下配置在Docker上创建Postgresql图像: docker compose.yml:* version: '2.0' services: postgresql: image: postgres:11 ports: - "5432:5432" expose: - "5432" environment: - P
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容器通常处于重新启动状态,有些容器似乎处于运行状态一秒钟。当我查看该容器日志时,我发现我遇到了以下错误:
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”所有。
此用户还必须拥有服务器进程
我曾尝试应用一些变通建议,例如,但没有一个有效。那么,我如何解决这个问题呢
更新:这是我的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-compose.yml,适用于Postgres 12:
version: "3"
services:
postgres:
image: "postgres:12"
container_name: "my-pg"
ports:
- 5432:5432
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
POSTGRES_DB: "mydb"
volumes:
- psql:/var/lib/postgresql/data
volumes:
psql:
然后我通过docker volume create psql创建了
psql
卷(因此只有一个没有任何实际路径映射的卷)。您可以尝试使用一个命名卷,该卷还具有将数据库保持在重启之间的附加效果。当然,docker用户应该有权限写入您用于这些卷的目录。如果同意,请将数据目录放在包含卷的容器外部,指定的卷将不存在于容器中。@Thomas是的,但如何操作?有什么例子吗?@jr593你同意什么?为什么不将你的建议作为答案发布?“为什么不将你的建议作为答案发布?”-嗯,在某些情况下,它只是一个建议而不是答案,因此它可能不完整,甚至可能不是正确的轨道(即使我们没有确定的答案,我们也试图提供帮助-至少我会使用评论)。对我来说,“试试这个”不值得回答,因为它可能对你的情况有帮助,也可能对你之后的其他人没有帮助。非常感谢,我更新了我的docker compoese.yml
文件,如我问题中的更新所示。但是,问题仍然存在,我不确定是否可以使用PowerShell作为管理员使用docker volume create psql
命令创建卷。执行docker volume ls
命令时,我可以观察psql卷。但我不知道问题出在哪里?请回答我最后的评论好吗?@zertuc请不要不耐烦。我知道这会令人沮丧,但我也有自己的工作哪个用户正在运行docker?您是否以管理员或其他用户的身份安装docker Desktop(afaik,即用于运行容器的用户)。如果它是另一个用户,您可以将卷创建为该用户而不是管理员吗?抱歉,Thomas,是的,您是对的:)我不记得使用了哪个用户,但通常我使用的用户(即使我没有使用管理员)已经是管理员权限。使用**将卷创建为该用户而不是管理员**,您的意思是由我的用户而不是管理员打开PowerShell吗?如果是这样的话,我试图直接打开PowerShell或cmd,但在他们的窗口左上角有一个指示符号“Administrator:…”。所以,它似乎是作为管理员打开的。但我也试图通过这种方式创建音量,但没有任何改变。