2016-12-05 15 views
0

Dockerコンテナがポート経由でホストシステムに接続できない理由は何ですか?Docker:ホストマシンへのポートのオープン方法

特に、私はDockerホストマシン(Dockerブリッジの172.17.0.1)で動作しているMySQLサーバーに接続しようとしています。しかし、何らかの理由でポート3306は常に閉じています。

再現するための手順は非常に簡単です:

  1. 設定のMySQL(または任意のサービス)0.0.0.0上(~/.my.cnfbind-address=0.0.0.0)を聞くために
  2. 実行

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

さんそれ。どんなに私が何をすべきか、それは常に私もUbuntuのイメージ、Windowsホストマシン、および他のポートと同じ試みた

PORT  STATE SERVICE 
3306/tcp closed mysql 

表示されません。

可能であれば、私は--net=hostを避けたいのですが、コンテナ化を適切に使用するだけです。

+0

この回答を見る:http://tackoverflow.com/a/24326540/645002これは非常に徹底しています。 – jaxxstorm

+0

になる必要があります。@Frap Yep、これは素晴らしい答えです。どのようにブリッジモードを使用してホストのIPアドレスなどを取得するかについての情報を提供しています。しかし残念ながら、この問題は解決しませんでした。 – Opossum

+0

ドッカーによる自動ブリッジ設定を完全にボークすることなく(あなたがiptablesのmasochistではないと仮定して)、 - net = host .....を除いて--add-hostを介してホストのカスタムDNSエントリを渡します。 – user2105103

答えて

0

IPが正しくないことが判明しました。ポートをブロックするものは何もなく、サービスも正常に動作していました。 pingnmapはIPをオンラインで表示しましたが、何らかの理由でホストシステムではありませんでした。

教訓:正しいホストアドレスを返すためにコンテナ内のrouteに頼らないでください。代わりに、それぞれLinuxまたはWindowsホスト上でifconfigまたはipconfigをチェックし、このIPを環境変数で渡します。

今私はdocker-composeを使用するように移行しており、すべての必要なサービスをコンテナに入れているので、ホストシステムは関与する必要はなく、単にDockerのDNSに頼ることができます。これははるかに満足です。

関連する問題