web-dev-qa-db-ja.com

Docker for Mac VM IP

以前はDocker ToolboxをOSXのvirtualboxで使用していたので、Docker for Macの使用に移行しました。

$(docker-machine ip default)でマシンのIPアドレスを取得していました。

Hyperkit IPアドレスを取得する信頼できる方法はありますか?

ありがとう!

13
mac

_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でコンテナポートを使用可能にします。

8
helmbert

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を介した接続のみを提供します。

Workaround

TCP Mac用Docker=の接続を提供するには:

  1. socatをインストールします。 brewの場合:

    brew install socat

  2. このsocatコマンドを実行して、TCP要求をソケットに転送します

    socat TCP-LISTEN:2375,reuseaddr,fork,bind=localhost UNIX-CONNECT:/var/run/docker.sock

  3. tcp://localhost:2375に必要なものをマップします

必要に応じて、起動時にsocatコマンドを実行できます。

これは、たとえば Webstorm nodeJSデバッガー nodeJS コンテナーに関連付けるのに役立ちました(執筆時点で docker debugging Webstorm docker integration plugin でサポートされていますが、Unixソケットを介してはサポートされていません。

Docker for Macの制限に関するドキュメント

https://docs.docker.com/docker-for-mac/networking/#/known-limitations-use-cases-and-workarounds

macOSにはdocker0ブリッジはありません

MacのDockerでネットワークが実装されているため、macOSにdocker0インターフェイスを表示できません。このインターフェイスは、実際にはHyperKit内にあります。

23
arvymetal

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}'
7
jaanus

私の現在の解決策は、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

1

別の回避策は、Sudo ifconfig lo0 alias 172.17.0.1を使用して、同じ静的IPアドレスを引き続き使用できるようにすることです(Linuxベースの同僚またはbashスクリプトがそれを使用することを主張している場合)。

0
user3330513