Docker Compose Postgres 容器连接被主机拒绝
Docker Compose Postgres Container connection refused from hosting machine
我有以下 docker 的定义-使用我想要 运行 的 postgres 图像编写文件,并从我的 hosting 机器连接到它PC,但我一直收到 Connection Refused localhost:5432
。我意识到主机网络驱动程序上的容器必须是 运行,但是网络模式不能解决这个问题。我做错了什么?
我 运行 这个 docker-compose -f [file] up
在 Windows 10 with Docker for Desktop
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。那么简短的回答是:删除 network_mode: host
并且撰写设置将以与您的 docker 运行 命令相同的方式工作。
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 host 你将能够通过主机上的 localhost:5432
访问 postgres 实例。
如果您 运行 在 Docker 上为桌面(Mac 或 Windows)编写给定的文件,您必须记住,在这种情况下有一个 VM 运行将您的容器和所有命令传递到该 VM。如果您不使用 network_mode: host
,Docker 将 (1) 在 VM 上正确公开端口,并且 (2) 在您的主机 (mac/windows) 上设置一些代理进程以转发进入虚拟机的流量。当您使用 network_mode: host
.
启动容器时,这基本上不起作用
在Ports
列下运行宁docker ps
时可以验证建立的映射。如果你 运行 和 network_mode: host
.
这将是空的
有关更多详细信息,请参阅 the docker forum 中的讨论。
我有以下 docker 的定义-使用我想要 运行 的 postgres 图像编写文件,并从我的 hosting 机器连接到它PC,但我一直收到 Connection Refused localhost:5432
。我意识到主机网络驱动程序上的容器必须是 运行,但是网络模式不能解决这个问题。我做错了什么?
我 运行 这个 docker-compose -f [file] up
在 Windows 10 with Docker for Desktop
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。那么简短的回答是:删除 network_mode: host
并且撰写设置将以与您的 docker 运行 命令相同的方式工作。
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 host 你将能够通过主机上的 localhost:5432
访问 postgres 实例。
如果您 运行 在 Docker 上为桌面(Mac 或 Windows)编写给定的文件,您必须记住,在这种情况下有一个 VM 运行将您的容器和所有命令传递到该 VM。如果您不使用 network_mode: host
,Docker 将 (1) 在 VM 上正确公开端口,并且 (2) 在您的主机 (mac/windows) 上设置一些代理进程以转发进入虚拟机的流量。当您使用 network_mode: host
.
在Ports
列下运行宁docker ps
时可以验证建立的映射。如果你 运行 和 network_mode: host
.
有关更多详细信息,请参阅 the docker forum 中的讨论。