如何从 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
环境变量并使用它来连接
我有一个使用 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
更新:
为避免在代码中对值进行硬编码,请将此 DNS 名称作为环境变量传递给容器。
environment:
REDIS_HOST: redis
WEB_APP: host.docker.internal
在应用内,获取 WEB_APP
环境变量并使用它来连接