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

如何从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: -

我有一个使用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应用,因此我的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')。。。