Mac用Dockerベータ版を使用しているコンテナのIP番号は何ですか?


28

以前は、Dockerツールキットを使用していましたが、Docker docker-machine inspect <machine-name>マシンのIPを検索して、内部のコンテナーによって提供されているページを表示できました。

Dockerベータクライアント(Mac用)にアップグレードしましたが、ページが提供されている場所が見つかりません。

docker-machineではなくdocker pureであるため、localhostで公開されているポートが表示されると思います。しかし、彼らは開いていません。カイトマティック経由でも、露出したポート(80)に移動しますが、何も見えません。

$ docker inspect tiny_cori | jq '.[].HostConfig.PortBindings'
{
  "80/tcp": [
    {
      "HostIp": "",
      "HostPort": "80"
    }
  ]
}

$ docker inspect tiny_cori | jq '.[].NetworkSettings.IPAddress'
"172.17.0.2"

$ curl 172.17.0.2:80/status
^C

$ docker exec -t -i tiny_cori /bin/bash

root@f1c303f60a15:/# curl localhost:80/status
{"status":"OK"}

root@f1c303f60a15:/# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/sit 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
    link/tunnel6 :: brd ::
4: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN group default qlen 1
    link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link
       valid_lft forever preferred_lft forever

172.17.0.2は実際に私のコンテナーのIPですか?そうでない場合、どこでIPを見つけることができますか?または、ポートマッピングの問題がありますか?

回答:


25

172.17.0.2であり、ドッカーコンテナーの「内側」にのみ存在するコンテナー内(およびその間に)のIPアドレスを見ています。

接続するIPアドレスは、ホストマシンのIPアドレスです。Macでifconfigを実行し、正しいもの(通常は192.168.xyまたは10.xyz)を見つけます。ローカルホストは、コンテナの外部からも動作するはずです。


5
誰がこれをダウン票したかはわかりませんが、実際には正しい答えです。Docker for Macでは、別個のマシンIPアドレスを持つ中間VMはなくなりました。(IPまたはlocalhostを介して)ホストを押すと、ポートが正しくマップされている限り、リクエストがコンテナに転送されます。
DNジョンソン

ありがとう。これがなぜ(2回)ダウン投票されたのか混乱しました。たぶん、実際の答えになるには単純すぎるように見えるからです。
ミカエルケアール

私はこれを支持しませんでした。しかし、何らかの理由でこの簡単な答えが機能しない(または機能しなかった)ユーザーのサブセットがあると思います。私は正しいとマークしています。
シネソ

2
OS Xでは、screenコマンドでxHyve VMにアクセスしてcurl localhost:8080を実行すると、コンテナの1つから応答が返されます。しかし、OS X端末で同じ操作を行うと、接続が拒否されます。これはどのように起こりますか?
mvmn 16

1
PSこれは、docker-composeを介して作成されたコンテナで発生しました。
mvmn 16

8

次のコマンドを入力すると、Docker Container IPが取得されます

$docker inspect <docker-container-name>

下にスクロールすると、「NetworkSettings」の下にIPアドレスが表示されます


ありがとうございました。私はこれを試したがうまくいかなかったことに言及することを怠った。私の質問が更新されました。
シネソ

正しいですが、pingすることはできません。これが、上記の正解がダウン投票される理由だと思います。私に残された問題は、仮想ホスト上のネットワークにブリッジする方法があるかどうかです。MacOSにうまく統合できれば、仮想ホストはまだそこにあり、そこからこれらのIPアドレスにpingできると確信していますが、そのネットワークにブリッジしてMacでローカルに使用できるようにすることはできませんか?
ジェリーグリーソン

6

Mac用DockerはIPアドレス127.0.0.1で実行されます


それは完全に虚偽の文ではありません:P
jonas

実際、これは私の問題を解決した最も簡単な答えでした。
ジェームズ

1

IPアドレスは、への出力で明示的に言及されていますdocker ps

$ docker ps
CONTAINER ID        ... PORTS
c785a183b376        ... 0.0.0.0:80->80/tcp, 443/tcp

$ curl 0.0.0.0:80/status
{"STATUS":"OK"}

さらに、localhostとは異なります0.0.0.0


5
0.0.0.0は現在のマシン上のすべてのIPアドレスを意味し、通常は接続ではなくリッスンするときに使用されます。上記のカールがどのように機能するかさえ分かりません。
ミカエルケア

2
0.0.0.0は、コンテナ内でサービスがバインドされているIPアドレスであり、サービスを実行しているホストのコンテキストでは何も意味しません。PORTS列の下の出力は、コンテナのポート80(0.0.0.0:80)がローカルでポート80(80 / tcp)とポート443にマップされていることを示しています。
ケビン

1
いいえ、同じではありませんが、指摘されているように、0.0.0.0はIPアドレスではなく、localhostを含むすべてが必要であることを聞くためのシグナルです。接続のコンテキストでは、サービスが特定のIP(localhostまたは外部IP)にバインドされていない限り同じです。
ジェリーグリーソン

0

127.0.0.1はlocalhost用だと思います。

Macで実行されているドッカーIDを取得します。ターミナルで「ifconfig」を実行すると、127.0.0.1以外の結果に含まれます。

ほとんど192.168.xyのようなもの

それが役に立てば幸い。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.