Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Docker Compose Postgres容器连接被主机拒绝_Postgresql_Docker_Networking_Docker Compose_Docker Desktop - Fatal编程技术网

Postgresql Docker Compose Postgres容器连接被主机拒绝

Postgresql 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

我有以下定义的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
      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电脑上复制它,它使用基本相同的概念。