Dockerコンテナからホストへのアクセス


この情報は2018 - 03 - 31のDocker
Dockerコンテナからホストポートにアクセスしたい.
例えば、NginXプロセスはポート8888を開いてホストマシン上で動作しています.
コンテナにコンテナを発見する方法を知っていますが、コンテナからホストIPアドレスを取得する方法を知りません.
したがって、私はインターネットをさまよった.

前提条件
私は主にMac用のDockerを使用しますが、時々Linuxを使用します.それで、両方のプラットホームで私の容器を走らせたいです.

TLドクター
https://github.com/bufferings/docker-access-host

ホストネットワークモード?
Dockerがホストネットワークモードを持っていることがわかった.
https://docs.docker.com/network/host/
このモードでは、コンテナは“127.0.0.1”でホストにアクセスできるようです.何てわかった!
それで、私はそれを試してみました、そして、それは私のLinuxマシンで働きます、しかし、それは私のマックで働きませんでした.それから、
https://docs.docker.com/network/network-tutorial-host/#prerequisites

The host networking driver only works on Linux hosts, and is not supported on Docker for Mac, Docker for Windows, or Docker EE for Windows Server.


を・ω・`) ……別の方法を見つけさせてください.

ホスト.ドッカー.内部?
私は、MACのためのDockerのコンテナのホストIPアドレスとしてhost.docker.internalを解決することができるとわかりました.すごい!それは私が知りたかったものです!でも.Linuxのバージョンはどこですか?
を・ω・`) 注意
また、いくつかの名前がありました.
  • Docker.フォー.マック.localhost <-- 17.06.0以降では廃止されました.
  • Docker.フォー.マック.ホスト.内部の<-- 17.12.0 - CE - MAC 46から現在廃止予定

  • ホスト.ドッカー.内部の<--から
    https://docs.docker.com/docker-for-mac/release-notes

    最後に、私の解決策はこのようです.docker-entrypoint.sh :
    HOST_DOMAIN="host.docker.internal"
    ping -q -c1 $HOST_DOMAIN > /dev/null 2>&1
    if [ $? -ne 0 ]; then
      HOST_IP=$(ip route | awk 'NR==1 {print $3}')
      echo -e "$HOST_IP\t$HOST_DOMAIN" >> /etc/hosts
    fi
    
    (main entrypoint)
    
    そして、dockerfileはエントリをエントリとして呼び出します.
    COPY docker-entrypoint.sh /usr/local/bin/
    
    ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
    
    結果として、Mac用Dockerは“host . docker . internal”を持ち、Linux版はホストファイルに追加されます.
    (๑•畝ㅂ•○○○○✧
    サンプルコードは以下の通りです.
    https://github.com/bufferings/docker-access-host
    私はホストを望みます.ドッカー.近い将来Linuxの内部に追加されます.
    あなたがより良い解決を知っているならば、知らせてください.