私はDocker for Macを使っています。 Dockerコンテナー内でnodejsベースのマイクロサービスを実行しています。私はブラウザを通してノードマイクロサービスをテストしたいです。実行中のdocker containerのIPアドレスを取得するにはどうすればいいですか?
あなたのホストからコンテナにポートをマッピングしたくない場合は、コンテナのdocker range ipに直接アクセスできます。この範囲は、デフォルトではあなたのホストからのみアクセスされます。あなたはあなたのコンテナネットワークデータをチェックすることができます:
docker inspect <containerNameOrId>
おそらくフィルタリングするほうが良いでしょう:
docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1
通常、デフォルトのdocker ipの範囲は172.17.0.0/16
です。すべてが正常で、特別なネットワークオプションを指定していない場合、ホストは172.17.0.1
、最初のコンテナは172.17.0.2
になります。
EDIT「バッシュトリック」の代わりにdocker機能を使用するもう1つのより洗練された方法:
docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
--format
オプションを使用して、コンテナ情報全体ではなくIPアドレスのみを取得します。
Sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
あなたがコンテナの中でそれを正しく取得したいならば、あなたは試すことができます
ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
あなたはフラグ-P
であなたのコンテナを開始することができます。これはあなたの画像の露出したポートにランダムなポートを「割り当て」ます。
docker port <container id>
を使えば、ランダムに選ばれたポートを見ることができます。アクセスはlocalhost:port
を通して可能です。
最近のdocker engineではこのコマンドを使います。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
そしてより古いエンジンのために使用します:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
私の場合、以下はMacでに動作しました:
私はMac上でコンテナIPに直接アクセスできませんでした。私はポート転送でlocalhost
を使う必要があります。ポートが8000の場合、http://localhost:8000
https://docs.docker.com/docker-for-mac/networking/#known-limitations-use-cases-and-workarounds を参照してください。
元の答えは: からでしたhttps://github.com/docker/for-mac/issues/2670#issuecomment-371249949