簡體   English   中英

如何將docker容器端口轉發給主機

[英]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進行更新。

https://docs.docker.com/userguide/dockerlinks/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM