将传入的 docker 连接绑定到 docker 容器内的特定主机名
Bind incoming docker connection to specific hostname inside docker container
我正在尝试将一些基于 Webpack 的项目迁移到 docker 容器内的 运行,但在配置网络方面遇到了一些问题。
- 我们的 WebPack devServer 配置如下:
{
host: 'dev.ng.com',
port: 4000,
compress: true,
disableHostCheck: true
}
在/etc/hosts
文件中我们有以下记录:
127.0.0.1 dev.ng.com
一切正常。
- 当我 运行 它在 docker 中时,我得到了
EADDRNOTAVAIL
错误,直到我在我的 docker-compose.yml
中添加了以下行:
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 就足够了。
我正在尝试将一些基于 Webpack 的项目迁移到 docker 容器内的 运行,但在配置网络方面遇到了一些问题。
- 我们的 WebPack devServer 配置如下:
{
host: 'dev.ng.com',
port: 4000,
compress: true,
disableHostCheck: true
}
在/etc/hosts
文件中我们有以下记录:
127.0.0.1 dev.ng.com
一切正常。
- 当我 运行 它在 docker 中时,我得到了
EADDRNOTAVAIL
错误,直到我在我的docker-compose.yml
中添加了以下行:
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 就足够了。