Postgresql Docker Compose Postgres容器连接被主机拒绝
我有以下定义的docker compose file with postgres图像,我想从我电脑的主机运行并连接到它,但我一直都得到本地主机:5432。我意识到容器必须在主机网络驱动程序上运行,但网络模式不能解决这个问题。我做错了什么 我在Windows 10上使用docker for Desktop运行docker compose-f[file]upPostgresql Docker Compose Postgres容器连接被主机拒绝,postgresql,docker,networking,docker-compose,docker-desktop,Postgresql,Docker,Networking,Docker Compose,Docker Desktop,我有以下定义的docker compose file with postgres图像,我想从我电脑的主机运行并连接到它,但我一直都得到本地主机:5432。我意识到容器必须在主机网络驱动程序上运行,但网络模式不能解决这个问题。我做错了什么 我在Windows 10上使用docker for Desktop运行docker compose-f[file]up version: '3.7' services: database: image: postgres:10.6 r
version: '3.7'
services:
database:
image: postgres:10.6
restart: always
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=p0stgr@s
- POSTGRES_DB=eagle_eye_local
network_mode: host
当我使用以下命令运行同一容器时,它会工作:
docker container run --name postgres10.6 -e POSTGRES_PASSWORD=p0stgr@s -e POSTGRES_USER=postgres -e POSTGRES_DB=eagle_eye_local -p 5432:5432 postgres:10.6
我假设您不是在linux上本机运行,而是在桌面上使用一些Docker。简单的回答是:删除
网络模式:主机
,组合设置的工作方式与docker run命令的工作方式相同
version: '3.7'
services:
database:
image: postgres:10.6
restart: always
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=p0stgr@s
- POSTGRES_DB=eagle_eye_local
您提供的两个示例并不完全相同,即使它们在真正的linux主机上运行时会产生类似的结果(类似于在linux主机上,您可以通过主机上的localhost:5432
访问postgres实例)
如果您在Docker for Desktop(Mac或Windows)上运行给定的compose文件,则必须记住,在这种情况下,有一个VM正在运行您的容器,所有命令都会传递到该VM中。如果不使用network\u模式:主机
Docker将(1)在虚拟机上正确公开端口,(2)在主机(mac/windows)上设置一些代理进程,以将流量转发到虚拟机。当您使用网络模式:host
启动容器时,这基本上不起作用
您可以在运行Ports
列下的docker ps
时验证已建立的映射。如果使用网络模式:主机运行,则此选项将为空
有关更多详细信息,请参阅中的讨论。您是在谈论docker For Mac还是docker For windows?我已经用平台更新了我的问题-这是windows 10和docker For Desktop。我会在家里核对你的答案。谢谢你说得对。我很确定这一行的改变会解决你的问题。也可以在我的Mac电脑上复制它,它使用基本相同的概念。