![](/img/trans.png)
[英]Docker container port unreachable after Docker host static ip changed
[英]How to forward a docker container port to the host
我正試圖“停靠”一個LAMP應用程序,我有一個問題是發送電子郵件。 我有2個容器,一個用於apache / php,另一個用於mysql。 一切正常,但我不能發送任何電子郵件。 我已經在apache容器上安裝了sendmail,但它需要連接到smtp服務器。
我有點谷歌,大多數答案是“設置你自己的MTA容器”,但是,我在Ubuntu上運行docker,並且已經有一個MTA設置(我可以發送電子郵件並使用開箱即用的sendmail)。 所以想法是使用主機smtp服務器。
應該可以設置“隧道”或“路由”(我不確定該術語)將連接到端口25從容器內部轉發到主機的端口25(基本上與docker的反向)用-p)。 我已經閱讀了docker高級網絡和'ip'命令手冊,但我無法想象如何做到這一點。
目前我的解決方案是使用--net=host
創建所有容器。 這樣sendmail
就可以看到主機的smpt服務器。 此方法的問題是:您不能同時使用--link
和--net=host
,因此意味着所有容器都必須使用--net=host
。
您希望從容器中訪問主機。 你已經可以這樣做了。 例如,如果運行Docker的主機是docker.mb14.com
那么您可以從容器中點擊該地址。
但這會給你一個面向外部的界面,你可能不想聽。 相反,您可以使用面向內部的接口,並使用--add-host <alias>:<ip>
在容器內為其指定友好名稱。 這將添加/etc/hosts
條目,就像--link
一樣
此文檔包括為主機系統添加條目的示例:
注意:有時您需要連接到Docker主機,這意味着獲取主機的IP地址。 您可以使用以下shell命令來簡化此過程:
$ alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \\S+' | awk '{ print \\$2 }'" $ docker run --add-host=docker:$(hostip) --rm -it debian
(如果您需要IPv6地址,那么可能會有一個未解決的問題 。)
編輯 :之后,如果您想要向前移動以便在容器上與localhost
,則需要自己處理該部分。 有很多方法可以做到這一點( 防火牆規則 , netcat , 代理 ),它們獨立於Docker。 Docker的-p
標志沒有內置的等價於另一個方向。
使用泊塢窗鏈接。 Docker鏈接公開了envrionment變量以及對/ etc / hosts進行更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.