2016-10-03 2 views
0

コンテナを開始するDocker Compose v2ファイルがあります。私はポート3001でローカルにサービスを実行します。私はDockerコンテナからこのサービスにアクセスしたいと思います。Dockerでホストに到達するCompose

ドッカー作曲ファイルは次のようになります。

version: '2' 
services: 
    my-thingy: 
    image: my-image:latest 
    #network_mode: host #DOES not help 
    environment: 
     - THE_HOST_I_WANT_TO_CONNECT_TO=http://127.0.0.1:3001 
    ports: 
    - "3010:3010" 

、どのように私はTHE_HOST_I_WANT_TO_CONNECT_TOに達することができますか?私が試した何

です:network_modeをホストするために設定

  • 。これはうまくいかなかった。 127.0.0.1に到達できませんでした。
  • ホストのローカルIPを使用すると、コンテナからホストにアクセスできることもわかります。速いハックはifconfig | grep broadcast | awk '{print $2}'のようなものを使ってIPを取得し、Docker Composeの代わりに使うことでしょう。このIPは再接続時に変更される可能性があり、異なる設定で異なるifconfig結果を持つ可能性があるため、私はよりよい解決策を探しています。

答えて

1

そして、例えば、このようdocker-composeに、この変数を参照してください。当分の間、私™のために動作しているようです...具体的には、私は私のDockerfileに以下の行を追加しました:これで

# - net-tools contains netstat, used to discover IP of Docker host server. 
# NOTE: the netstat trick is to make Docker host server accessible 
# from inside Docker container under name 'dockerhost'. Unfortunately, 
# as of 2016.10, there's no official/robust way to do this when Docker host 
# has no public IP/DNS entry. What is used here is built based on: 
# - https://github.com/docker/docker/issues/1143#issuecomment-39364200 
# - https://github.com/docker/docker/issues/1143#issuecomment-46105218 
# See also: 
# - http://stackoverflow.com/q/38936738/98528 
# - https://github.com/docker/docker/issues/8395#issuecomment-200808798 
# - https://github.com/docker/docker/issues/23177 
RUN apt-get update && apt-get install -y net-tools 
CMD (netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2" dockerhost"}' >> /etc/hosts) && \ 
     ...old CMD... 

を、私は、ホストの名前としてdockerhostを使用することができますDockerがインストールされている場所。前述したように、これはに基づいています。

  • https://github.com/docker/docker/issues/1143#issuecomment-39364200

    (...)一つの方法は、ドッカーホストが起こるドッカーブリッジのアドレスを通じて到達可能であるという事実に依存することですコンテナのデフォルトゲートウェイにする。言い換えると、ip route ls | grep ^defaultという巧妙な構文解析が必要な場合もあります。もちろん、実装の詳細(デフォルトのゲートウェイはDockerホストのIPアドレスになります)に依存しており、将来変更される可能性があります。 (...)

  • https://github.com/docker/docker/issues/1143#issuecomment-46105218

    (...)私たちのような多くの人がこの

    netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}' 
    

netstat -nr meansのような少しちらほらを探しています:

Netstatの Linuxのネットワークサブシステムに関する情報を出力します。

ルート、-r
カーネルルーティングテーブルを表示します。
-n
(...)
--numericは、数値アドレスを表示の代わりに、シンボリックホスト、ポートまたはユーザー名を決定しようとしています。

0

これはDocker Composeの既知の問題です。Document how to connect to Docker host from container #1143を参照してください。 /etc/hostsdockerhostエントリの推奨ソリューションは実装されていません。 export LOCAL_XX_HOST="http://$(ifconfig en0 inet | grep "inet " | awk -F'[: ]+' '{ print $2 }'):3001"

LOCAL_XX_HOST変数を作成します。また、問題にamcdlによってa commentで提案されているように

私はシェル変数と解決のために行ってきました。私はdocker issue #1143のコメントから別のハック/ workarkoundを使用しました

my-thingy: 
    image: my-image:latest 
    environment: 
     - THE_HOST_I_WANT_TO_CONNECT_TO=${LOCAL_XX_HOST} 
関連する問題