我正試圖將一些基于Webpack的專案遷移到docker容器內運行,在配置網路方面遇到一些問題。
我們的WebPack devServer的配置方式如下
{
host。'dev.ng.com'。
port: 4000,
compress: true,
disableHostCheck: true, disableHostCheck.
在/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"/span>
ports:
- "4000:4000"/span>
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,這可以實作嗎?
uj5u.com熱心網友回復:
是的,127.0.0.1通常只能從localhost到達。容器的作業就像它們是虛擬機一樣。
你需要把它配置成在任何地方監聽everywhere。所以很可能,"dev.ng.com:0.0.0.0"就是你想要的。這樣的東西在正常情況下應該謹慎使用,因為大多數情況下我們不希望將內部服務共享到互聯網上。但在這里,它的作用只是讓你的配置獨立于docker給你的容器應用的ip/netmask。
除此之外,你需要將主機的傳入連接轉發給你的容器。這可以通過一個
- ports:
"0.0.0.0:4000:4000"
在你的docker-compose.yml中。
也許你還想讓你的4000埠(主機的)可以從外部世界到達,這可以通過你的防火墻規則來完成。
在專業的配置中,通常會有一些前端(以提供加密/安全/負載平衡),但如果你只想向你的老板展示你的作業,一個http://a.b.c.d:4000就足夠了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/320681.html
標籤:
