我有一个包含2个服务的docker组合文件: apache airflow服务和用于airflow的postgres服务。
我有一个postgres数据库在本地的5555端口上运行。我如何连接我的docker编写文件到我的本地数据库?
我修剪后的合成文件如下所示:
version: 3
services:
postgres:
ports:
- "5432:5432"
webserver:
environment:
- db_uri=path.localhost:5555/db_name
ports:
- "8080:8080"
network_mode: "host"当我像这样运行我的docker时,我得到这个错误
(psycopg2.OperationalError) could not translate host name "postgres" to address: Name or service not known。但是,如果我将env var从localhost更改为我的option地址(db_uri=path.123.456.789.012:5555/db_name)并删除network_mode选项,它就可以正常工作。我如何才能将其更改为动态的,这样如果其他人运行docker,它也将为他们工作?
发布于 2021-07-29 17:47:46
我知道这是一个老问题,但我认为应该是这样的: webserver:
environment:
- db_uri=postgres:5432/db_name
ports:
- "8080:8080"发布于 2020-02-10 01:33:04
你不能使用主机网络中的localhost或其他使用服务名称的服务来连接主机数据库,在主机网络中,服务不会获得IP,因此主机网络中的所有服务都是可用的,您可以使用HOST IP或Docker HOST for window和Mac等访问其他服务。
如果您对容器使用
host network mode,则该容器的网络堆栈不会与Docker主机隔离(容器共享主机的网络命名空间),并且容器不会获得自己的IP地址分配的。例如,如果您运行绑定到端口80的容器,并且使用主机网络,则可以在主机的IP地址的端口80上使用容器的应用程序。
如果你想访问主机数据库,你可以传递主机IP或者你可以使用host.docker.internal,但是这在linux上是行不通的,对于mac和window它应该可以工作。
所以你可以试试
version: 3
services:
postgres:
ports:
- "5432:5432"
webserver:
environment:
- db_uri=HOST_IP:5555/db_name
ports:
- "8080:8080"https://stackoverflow.com/questions/60138813
复制相似问题