以前はDocker ToolboxをOSXのvirtualboxで使用していたので、Docker for Macの使用に移行しました。
$(docker-machine ip default)
でマシンのIPアドレスを取得していました。
Hyperkit IPアドレスを取得する信頼できる方法はありますか?
ありがとう!
_docker-machine
_を使用する場合のように、xhyve VMのIPアドレスを直接操作する必要はありません。すべてのポートマッピングは、localhost
に直接マップされます。
_$ docker run -d -p 8080:80 nginx:latest
$ curl localhost:8080
_
公式ドキュメント も参照してください:
_
-p
_引数を使用してコンテナを実行すると、たとえば、_$ docker run -p 80:80 -d nginx
_ Mac用のDockerは、localhost
でコンテナポートを使用可能にします。
Dockerツールボックスに反して、Docker for WindowsおよびDocker for Macは、Docker OSで直接実行されているため、docker実行可能ファイルによって直接処理される(VirtualBoxではなく)軽量ハイパーバイザーの下で実行される軽量仮想マシンを使用します。
したがって、docker-machineで表示されず、localhost以外のIPアドレスは表示されません。
Docker for Windowsは、tcp://localhost:2375
へのネットワーク接続を許可するHyperVハイパーバイザーに依存しています。
Docker for Macは、ハイパーバイザーxhyveに依存しています。実装方法は、ソケットunix:///var/run/docker.sock
を介した接続のみを提供します。
TCP Mac用Docker=の接続を提供するには:
socatをインストールします。 brewの場合:
brew install socat
このsocatコマンドを実行して、TCP要求をソケットに転送します
socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock
tcp://localhost:2375
に必要なものをマップします
必要に応じて、起動時にsocatコマンドを実行できます。
これは、たとえば Webstorm nodeJSデバッガーを nodeJS コンテナーに関連付けるのに役立ちました(執筆時点で docker debugging は Webstorm docker integration plugin でサポートされていますが、Unixソケットを介してはサポートされていません。
https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds
macOSにはdocker0ブリッジはありません
MacのDockerでネットワークが実装されているため、macOSにdocker0インターフェイスを表示できません。このインターフェイスは、実際にはHyperKit内にあります。
Docker for Macを起動するたびに起動するsocatのdockerイメージを使用できます
docker run -d --restart = always -p 2376:2375 -v /var/run/docker.sock:/var/run/docker.sock bobrik/socat TCP4-LISTEN:2375、fork、reuseaddr UNIX-CONNECT:/ var/run/docker.sock
Docker API IPアドレスを見つけます。
ifconfig | grep 'inet 192'| awk '{ print $2}'
私の現在の解決策は、Docker Machine(別のIPアドレスで使用可能なlinux VM))を使用してコンテナーを作成し、コンテナーのすべてのトラフィックをdocker machine VMにルーティングすることです。
Sudo route -n add -net 172.18.0.0/16 192.168.99.100
docker inspect
とDockerマシンのIPアドレスを使用して、Dockerコンテナのネットワーク範囲を取得できますVM using docker-machine ip
別の回避策は、Sudo ifconfig lo0 alias 172.17.0.1
を使用して、同じ静的IPアドレスを引き続き使用できるようにすることです(Linuxベースの同僚またはbashスクリプトがそれを使用することを主張している場合)。