将传入的 docker 连接绑定到 docker 容器内的特定主机名

Bind incoming docker connection to specific hostname inside docker container

我正在尝试将一些基于 Webpack 的项目迁移到 docker 容器内的 运行,但在配置网络方面遇到了一些问题。

    {
        host: 'dev.ng.com',
        port: 4000,
        compress: true,
        disableHostCheck: true
    }

/etc/hosts文件中我们有以下记录:

127.0.0.1    dev.ng.com

一切正常。

extra_hosts:
 - "dev.ng.com:127.0.0.1"

但现在我的 docker 应用程序内的应用程序无法从主机获得。

相关的 docker-compose.yml 部分如下:

  gui-client:
    image: "gui-client"
    ports:
      - "4000:4000"
    extra_hosts:
      - "dev.ng.com:127.0.0.1"

如果我将我的 Webpack host: 'dev.ng.com' 更改为 host:'0.0.0.0' 它工作正常,但我不想更改 Webpack 配置和 运行 它是。

我对 docker 网络内部知识的了解是有限的,我想所有从主机到 docker 容器的入站连接都应该重定向到 dev.ng.com:4000,而现在它们被重定向到 0.0.0.0:4000,能实现吗?

是的,127.0.0.1 通常只能从本地主机访问。容器就像虚拟机一样工作。

您需要将其配置为无处不在。所以很可能 "dev.ng.com:0.0.0.0" 就是你想要的。在正常情况下应该小心使用这些东西,因为大多数情况下我们不想将内部服务共享到互联网上。但在这里它的目的只是为了让你的配置独立于 ip/netmask 什么 docker 给你的容器应用程序。

除此之外,您需要将主机的传入连接转发到您的容器。这可以通过

- ports:
    "0.0.0.0:4000:4000"

在你的docker-compose.yml.

可能您还希望使您的(主机的)端口 4000 可以从外部世界访问,这可以通过您的防火墙规则来完成。

在专业配置中,通常会有一些前端(以提供 encryption/security/load 平衡),但如果您只想向老板展示您的工作,http://a.b.c.d:4000 就足够了。