【问题标题】:How to connect my docker compose file to localhost databse如何将我的 docker compose 文件连接到 localhost 数据库
【发布时间】:2020-02-09 16:32:58
【问题描述】:

我有一个包含 2 个服务的 docker compose 文件:一个 apache 气流服务和一个用于气流的 postgres 服务。
我有一个在 5555 端口上本地运行的 postgres 数据库。如何将我的 docker compose 文件连接到我的本地数据库?
我修剪后的撰写文件如下所示:

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。 但是,如果我将环境变量从 localhost 更改为我的 inet ip 地址 (db_uri=path.123.456.789.012:5555/db_name) 并删除 network_mode 选项,它工作正常。如何将其更改为动态的,这样如果其他人运行 docker,它也可以为他们工作?

【问题讨论】:

    标签: postgresql docker docker-compose


    【解决方案1】:

    我知道这是一个老问题,但我认为 它应该是这样的: 网络服务器:

    environment:
    
      - db_uri=postgres:5432/db_name
    
    ports:
      - "8080:8080"
    

    【讨论】:

      【解决方案2】:

      在主机网络中使用localhost或使用服务名称的其他服务无法连接HOST数据库,在主机网络中服务没有获得IP,因此主机网络中的每个服务都可用,您可以使用@访问其他服务987654323@或window和Mac等Docker主机。

      如果您将host network mode 用于容器,则该容器的 网络栈与 Docker 主机(容器 共享主机的网络命名空间),而 容器不 分配自己的 IP 地址。例如,如果你运行一个容器 它绑定到端口 80 并且您使用主机网络,容器的 应用程序在主机 IP 地址的 80 端口上可用。

      如果你想访问主机数据库,那么你可以传递主机 IP 或者你可以使用host.docker.internal,但这在 linux 中不起作用,对于 mac 和 windows 应该可以。

      你可以试试

      version: 3
      services:
        postgres:
          ports:
            - "5432:5432"
      
        webserver:
          environment:
            - db_uri=HOST_IP:5555/db_name
          ports:
            - "8080:8080"
      

      【讨论】:

      • HOST_IP 是特殊关键字吗?因为当我使用它时,我得到了这个错误psycopg2.OperationalError: could not translate host name "HOST_IP" to address: Name or service not known
      • 不,host.docker.internal 这在 docker 的上下文中是特殊的,而 HOST IP 则不是。您可以找到主机 IP 使用 ifconfigipconfig
      • 如何在 docker compose 文件中使用host.docker.internal
      • 主机有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。从 18.03 开始​​,我们的建议是连接到特殊的 DNS 名称 host.docker.internal,它解析为主机使用的内部 IP 地址。这是出于开发目的,不适用于 Docker Desktop for Mac 之外的生产环境。docs.docker.com/docker-for-mac/networking
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 2018-12-21
      • 2020-06-28
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多