如何从docker compose创建的docker容器内部连接到本地计算机?
我有一个使用docker compose创建的docker容器。这是yml文件如何从docker compose创建的docker容器内部连接到本地计算机?,docker,docker-compose,docker-network,Docker,Docker Compose,Docker Network,我有一个使用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: -
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应用,因此我的web应用需要从此容器连接到本地计算机。我该怎么做?localhost的webapp托管在不同的端口(7777)上
我已经看到了,并且我使用“extra_hosts”选项实现了它,但我想知道是否有其他方法可以实现这一点?Docker compose只是一个用于启动多个Docker容器的实用程序。因此,对于使用
docker-compose
启动容器的情况,几乎所有适用于使用docker-run
启动容器的情况都是相同的
特别是,由于您在MAC上,因此在解析到主机的容器中有一个特殊的DNS名称
根据您拥有的docker版本,DNS可能略有不同
对于Docker 18.03及以后版本,您可以使用host.Docker.internal
对于Docker 17.06及以上版本,请使用Docker.For.mac.host.internal
低于17.06使用docker.for.mac.localhost
因此,您可以使用:7777
更新:
为了避免对代码中的值进行硬编码,请将此DNS名称作为env变量传递给容器
environment:
REDIS_HOST: redis
WEB_APP: host.docker.internal
在应用程序内部,获取
WEB\u app
环境变量并使用它连接您使用的是什么操作系统?可能是@tgogos的副本我的本地机器是Mac OSX@yamenk我看到了这个问题,但这只适用于docker run创建的容器,而不是docker compose。我尝试了为那个问题提供的解决方案,但什么都没用。这就是为什么我想要一个新问题来关注docker合成容器。@yamenk是对的,如果你也想阅读文档,你可以检查:host.docker.internal works,但我在我的节点应用程序中硬编码了这个值。示例:axios.get(http://host.docker.internal:7777')... 如果我不再从Docker容器运行此应用程序,并且当前仅从本地计算机运行,该怎么办。是否有一种方法可以将host.docker.internal设置为Dockerfile中的env变量,然后在脚本中获取它?示例:axios.get(
http://:process.env.LOCAL\u HOST:7777')。。。