首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将docker编写文件连接到localhost数据库

如何将docker编写文件连接到localhost数据库
EN

Stack Overflow用户
提问于 2020-02-10 00:32:59
回答 2查看 2.4K关注 0票数 1

我有一个包含2个服务的docker组合文件: apache airflow服务和用于airflow的postgres服务。

我有一个postgres数据库在本地的5555端口上运行。我如何连接我的docker编写文件到我的本地数据库?

我修剪后的合成文件如下所示:

代码语言:javascript
运行
复制
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,它也将为他们工作?

EN

回答 2

Stack Overflow用户

发布于 2021-07-29 17:47:46

我知道这是一个老问题,但我认为应该是这样的: webserver:

代码语言:javascript
运行
复制
environment:

  - db_uri=postgres:5432/db_name

ports:
  - "8080:8080"
票数 1
EN

Stack Overflow用户

发布于 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它应该可以工作。

所以你可以试试

代码语言:javascript
运行
复制
version: 3
services:
  postgres:
    ports:
      - "5432:5432"

  webserver:
    environment:
      - db_uri=HOST_IP:5555/db_name
    ports:
      - "8080:8080"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60138813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档