我有一个使用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"]
从这个容器我的网络应用程序需要连接到本地计算机,因为我的本地计算机正在运行我的docker容器的Web应用程序需要访问的另一个Web应用程序。我该怎么做呢? localhost的webapp托管在不同的端口(7777)。
我已经看过From inside of a Docker container, how do I connect to the localhost of the machine?,我使用" extra_hosts"选项,但我想知道是否还有其他方法可以做到这一点?
答案 0 :(得分:5)
Docker compose只是一个用于启动多个Docker容器的实用程序。因此,对于以Linecast
开头的容器,几乎所有适用于使用docker run
启动容器的内容都是相同的。
特别是,由于您在MAC上,因此容器内部有一个特殊的DNS名称,该名称已解析为主机。
根据您拥有的泊坞窗版本,DNS可能略有不同。
对于Docker 18.03及更高版本,您可以使用docker-compose
对于Docker 17.06及其以上使用host.docker.internal
17.06以下使用docker.for.mac.host.internal
因此,您可以使用docker.for.mac.localhost
<强>更新强>
为避免对代码中的值进行硬编码,请将此DNS名称作为env变量传递给容器。
<dns-name>:7777
在应用内部,获取environment:
REDIS_HOST: redis
WEB_APP: host.docker.internal
环境变量并使用它来连接