首页 > 解决方案 > 如何从 docker-compose 创建的 docker 容器内部连接到本地计算机?

问题描述

我有一个使用 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 应用程序需要从这个容器连接到本地机器,因为我的本地机器正在运行另一个 web 应用程序,我的 docker 容器的 web 应用程序需要访问该 web 应用程序。我该怎么做呢?localhost 的 webapp 托管在不同的端口 (7777) 上。

我已经看到从 Docker 容器内部,如何连接到机器的本地主机?,并且我使用“extra_hosts”选项让它工作,但我想知道是否有另一种方法可以做到这一点?

标签: dockerdocker-composedocker-network

解决方案


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环境变量并使用它进行连接


推荐阅读