2016-12-05 97 views
0

Docker容器無法通過端口連接到主機系統的原因是什麼?Docker:如何打開端口到主機?

具體來說,我試圖連接到在Docker主機上運行的MySQL服務器(Docker橋上的172.17.0.1)。但由於某些原因,端口3306始終關閉。

重現的步驟非常簡單:

  1. 配置MySQL(或服務),以監聽0.0.0.0bind-address=0.0.0.0~/.my.cnf
  2. 運行

    $ docker run -it alpine sh 
    # apk add --update nmap 
    # nmap -p 3306 172.17.0.1 
    

這它。無論我做什麼,它總是會顯示

PORT  STATE SERVICE 
3306/tcp closed mysql 

我試過同樣的Ubuntu的圖像,Windows主機和其他端口以及。

如果可能的話,我想避免--net=host,只是爲了正確使用集裝箱化。

+0

看看這個答案:http://stackoverflow.com/a/24326540/645002這是非常徹底的,應該讓你在哪裏你需要是 – jaxxstorm

+0

@Frap是的,這是一個很好的答案,也是我最得到的地方有關如何使用網橋模式和獲取主機IP地址等信息。但不幸的是,這並沒有幫助解決這個問題。 – Opossum

+0

沒有完全通過docker設置自動橋設置(假設你不是iptables受虐狂),並且不包括--net = host .....通過--add-host爲主機傳遞一個自定義dns條目。 – user2105103

回答

0

原來知識產權是不正確的。沒有任何阻塞端口和服務運行良好。 pingnmap顯示IP爲在線,但由於某些原因,它不是主機系統。

經驗教訓:不要依賴容器中的route來返回正確的主機地址。請分別在Linux或Windows主機上檢查ifconfigipconfig,並通過環境變量傳遞此IP。

現在我正在轉向使用docker-compose並將所有必需的服務放入容器中,因此主機系統不需要涉及,我可以簡單地依賴Docker的DNS。這更令人滿意。

相關問題