如何从 docker-compose 创建的 docker 容器内部连接到本地机器?

How do I connect to local machine from inside of docker container created by docker-compose?

我有一个使用 docker-compose 创建的 docker 容器。这是 yml 文件。

version: "3"
services:
  redis:
    image: "redis"
  web:
    image: "myimage"
    ports:
      - "8000:8000"
    environment:
      REDIS_HOST: redis
    volumes:
      - .:/usr/src/app
    depends_on:
      - "redis"
    command: ["npm", "start"]

我的 Web 应用程序需要从这个容器连接到本地计算机,因为我的本地计算机是 运行 我的 docker 容器的 Web 应用程序需要访问的另一个 Web 应用程序。我该怎么做呢? localhost 的 webapp 托管在不同的端口 (7777)。

我已经看到 From inside of a Docker container, how do I connect to the localhost of the machine?,我使用 "extra_hosts" 选项让它工作,但我想知道是否有其他方法可以做到这一点?

Docker compose 只是一个用于启动多个 Docker 容器的实用程序。因此,几乎所有适用于使用 docker run 启动容器的事情对于使用 docker-compose.

启动的容器都是相同的

特别是,由于您在 MAC 上,因此容器内有一个解析到主机的特殊 DNS 名称。

根据您拥有的 docker 版本,DNS 可能略有不同。

对于 Docker 18.03 及更高版本,您可以使用 host.docker.internal

对于 Docker 17.06 及更高版本使用 docker.for.mac.host.internal

17.06以下使用docker.for.mac.localhost

因此您可以使用 <dns-name>:7777

连接到计算机上的 Web 应用程序

更新:

为避免在代码中对值进行硬编码,请将此 DNS 名称作为环境变量传递给容器。

environment:
    REDIS_HOST: redis
    WEB_APP: host.docker.internal

在应用内,获取 WEB_APP 环境变量并使用它来连接