【问题标题】:lookup host.docker.internal: no such host查找host.docker.internal:没有这样的主机
【发布时间】:2022-07-03 16:53:10
【问题描述】:

我试图运行 sudo docker-compose up 来让我的应用程序运行并连接到本地主机 mongodb,但我遇到了这个错误

time="2021-12-28T08:31:54Z" level=fatal msg="server selection error: context deadline exceeded, current topology: { Type: Unknown, Servers: [{ Addr: host.docker.internal:27017, Type: Unknown, Last error: connection() error occured during connection handshake: dial tcp: lookup host.docker.internal: no such host }, ] }"

最初,我尝试将 localhost 替换为 host.docker.internal,而不是让 mongo uri 连接到 docker 网络,但它似乎无法找到它。我也是最新版本的docker,所以不是docker版本不支持的问题。

docker-compose.yaml

version: '3.3'
services:
  app: 
    build: 
      context: .
      dockerfile: dockerfile
    ports: 
      - "8080:20717"
    restart: unless-stopped
    env_file: .env
    networks:
      - ext
      - int

networks:
 ext:
 int:
  internal: true

我之前有一个 extra_hosts 部分,但用 networks 部分替换了它。

    extra_hosts:
        - "host.docker.internal:127.0.0.1"

我的.env 文件包含应用程序的 URI 和其他一些必要变量

DB_URI=mongodb://host.docker.internal:27017
CITY_DB=nht_cities
COL_USER=user
COL_CITY=city
USER_AUTH_TOKEN=50dbafa...

我的应用程序本身在端口 8080 上运行

fmt.Println("Server running at port 8080")
log.Fatal(http.ListenAndServe(":8080", r)) // r being the router

【问题讨论】:

  • 您的主机操作系统是什么?你也可以在容器中运行 MongoDB 实例吗?
  • 我使用 Linux (Zorin OS)。我该怎么做?为什么会有帮助?
  • 您可以将基于the mongo image 的容器添加到您的docker-compose.yml 文件中。如果你这样做了,那么你可以使用 Compose 服务名作为主机名,而不用试图弄清楚如何从 Docker 中调用回主机。另请参阅 Docker 文档中的 Networking in Compose
  • 所以,我尝试让数据库作为图像而不是在本地主机上运行。我将DB_URI 替换为包含db 作为服务名称,而不是host.docker.internal。执行docker-compose up 似乎可以使其正常工作,尽管它会向我抛出一些奇怪的错误。但是在 docker playground 上运行它会给我一个找不到主机的错误。我可以将它们编辑到问题中,但上次我尝试过时,所有 cmets 都消失了。

标签: mongodb docker go


【解决方案1】:

将此添加到 docker compose 中的“应用”服务

extra_hosts:
  - "host.docker.internal:host-gateway"

然后您的应用将能够连接到在主机上运行的 mongodb。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    相关资源
    最近更新 更多