web-dev-qa-db-ja.com

ホストからDockerコンテナのIPアドレスを取得する方法

新しいコンテナが作成された後に、ホストからコンテナのIPアドレスを取得するために実行できるコマンドはありますか?

基本的に、Dockerがコンテナーを作成したら、私は自分のコード展開とコンテナー構成スクリプトをロールバックしたいと思います。

1051
Murali Allada

Inspectの--formatオプションが助けになります。

Modern Dockerクライアントの構文:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

旧Dockerクライアントの構文:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

これはIPアドレスだけを返します。

コメントで述べたように、もしあなたが Windows 上にいるのなら、中括弧のまわりに一重引用符"の代わりに二重引用符'を使ってください。

1657
WouterD

あなたはdocker inspect <container id>を使うことができます

例:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID
484
creack

まずコンテナIDを取得します。

docker ps

(最初の列はコンテナIDです)

実行するにはコンテナIDを使用します。

docker inspect <container ID>

下部の「NetworkSettings」の下に、「IPAddress」があります。

またはただしてください:

docker inspect <container id> | grep "IPAddress"
350
Krunal

docker inspect CONTAINER_ID | grep "IPAddress"

175
nPcomp

1つのコマンドですべてのコンテナ名とそのIPアドレスを取得します。

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

docker-composeを使用している場合、コマンドは次のようになります。

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

出力は次のようになります。

/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2
102
Hemerson Varela

このシェルスクリプトを~/.bashrcファイルまたは関連ファイルに追加します。

docker-ip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "[email protected]"
}

それから、コンテナのIPアドレスを取得するために、単にこれをしてください:

docker-ip YOUR_CONTAINER_ID

Dockerの新しいバージョンの場合は、以下を使用してください。

docker-ip() {
        docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "[email protected]"
}
89
Tuong Le

すべてのコンテナのIPアドレスを表示します。

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
34
zhouji

Docker 1.3以降では、以下の手順で確認することもできます。

実行中のDockerを入力してください。

docker exec [container-id or container-name] cat /etc/hosts
172.17.0.26 d8bc98fa4088
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.17 mysql
30
Jake W

Dockerバージョン1.10.3以降、ビルド20f81dd

Dockerに特に指示がない限り、Dockerは常にブリッジネットワークでコンテナーを起動します。だから、あなたは以下のこのコマンドを試すことができます:

docker network inspect bridge

これはその実行中のコンテナのIPアドレスを表示するコンテナセクションを返します。

[
    {
        "Name": "bridge",
        "Id": "40561e7d29a08b2eb81fe7b02736f44da6c0daae54ca3486f75bfa81c83507a0",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Containers": {
            "025d191991083e21761eb5a56729f61d7c5612a520269e548d0136e084ecd32a": {
                "Name": "drunk_leavitt",
                "EndpointID": "9f6f630a1743bd9184f30b37795590f13d87299fe39c8969294c8a353a8c97b3",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.Host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]
22
Athena

実行します。

docker ps -a

これはアクティブなdocker画像を表示します。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
3b733ae18c1c        parzee/database     "/usr/lib/postgresql/"   6 minutes ago       Up 6 minutes                 5432/tcp            serene_babbage

CONTAINER ID値を使用してください。

docker inspect <CONTAINER ID> | grep -w "IPAddress" | awk '{ print $2 }' | head -n 1 | cut -d "," -f1

"172.17.0.2"

21
spicyramen

私が愛したいくつかの答えに基づいて、私はそれらをすべてのIPアドレスを取得するための関数と特定のコンテナ用の別の関数にマージすることにしました。それらは私の.bashrcファイルに入っています。

docker-ips() {
    docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
}

docker-ip() {
  docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "[email protected]"
}

最初のコマンドはすべてのコンテナのIPアドレスを与え、2番目のコマンドは特定のコンテナのIPアドレスを与えます。

docker-ips
docker-ip YOUR_CONTAINER_ID
18
silgon

名前によるコンテナーの参照

docker run ... --name pg-master

それから名前でIPアドレスaddressをつかみます:

MASTER_Host=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' pg-master)
16
Sameer C

DockerはGoで内部的に作られており、クエリの目的でもGo構文を使います。

特定のコンテナのIPアドレスについて調べるには、コマンドを実行する必要があります(フォーマットオプションの場合は-f)。

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_id_or_name

コンテナーIDまたは名前の場合は、コマンドdocker container lsを実行できます。実行中のすべてのコンテナが一覧表示されます。

13
Rushal Verma

docker-composeの下で実行されているすべてのコンテナからIPアドレスのテーブルを取得するために、次のBashスクリプトを書きました。

function docker_container_names() {
    docker ps -a --format "{{.Names}}" | xargs
}

# Get the IP address of a particular container
dip() {
    local network
    network='YOUR-NETWORK-HERE'
    docker inspect --format "{{ .NetworkSettings.Networks.$network.IPAddress }}" "[email protected]"
}

dipall() {
    for container_name in $(docker_container_names);
    do
        local container_ip=$(dip $container_name)
        if [[ -n "$container_ip" ]]; then
            echo $(dip $container_name) " $container_name"
        fi
    done | sort -t . -k 3,3n -k 4,4n
}

変数networkを自分のネットワーク名に変更する必要があります。

13
Dunk

これが私が今日Pythonで開発した、「docker inspect container」JSON出力をデータソースとして使用したソリューションです。

私は検査しなければならない多くのコンテナとインフラストラクチャを持っています、そしてどんなコンテナからでも基本的なネットワーク情報を速くそして かなり 入手する必要があります。だから私はこのスクリプトを作ったのです。

重要: バージョン1.9以降、Dockerでは複数のネットワークを作成してそれらをコンテナに接続することができます。

#!/usr/bin/python

import json
import subprocess
import sys

try:
    CONTAINER = sys.argv[1]
except Exception as e:
    print "\n\tSpecify the container name, please."
    print "\t\tEx.:  script.py my_container\n"
    sys.exit(1)

# Inspecting container via Subprocess
proc = subprocess.Popen(["docker","inspect",CONTAINER],
                      stdout=subprocess.PIPE,
                      stderr=subprocess.STDOUT)

out = proc.stdout.read()
json_data = json.loads(out)[0]

net_dict = {}
for network in json_data["NetworkSettings"]["Networks"].keys():
    net_dict['mac_addr']  = json_data["NetworkSettings"]["Networks"][network]["MacAddress"]
    net_dict['ipv4_addr'] = json_data["NetworkSettings"]["Networks"][network]["IPAddress"]
    net_dict['ipv4_net']  = json_data["NetworkSettings"]["Networks"][network]["IPPrefixLen"]
    net_dict['ipv4_gtw']  = json_data["NetworkSettings"]["Networks"][network]["Gateway"]
    net_dict['ipv6_addr'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6Address"]
    net_dict['ipv6_net']  = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6PrefixLen"]
    net_dict['ipv6_gtw']  = json_data["NetworkSettings"]["Networks"][network]["IPv6Gateway"]
    for item in net_dict:
        if net_dict[item] == "" or net_dict[item] == 0:
            net_dict[item] = "null"
    print "\n[%s]" % network
    print "\n{}{:>13} {:>14}".format(net_dict['mac_addr'],"IP/NETWORK","GATEWAY")
    print "--------------------------------------------"
    print "IPv4 settings:{:>16}/{:<5}  {}".format(net_dict['ipv4_addr'],net_dict['ipv4_net'],net_dict['ipv4_gtw'])
    print "IPv6 settings:{:>16}/{:<5}  {}".format(net_dict['ipv6_addr'],net_dict['ipv6_net'],net_dict['ipv6_gtw'])

出力は次のようになります。

$ python docker_netinfo.py debian1

[frontend]

02:42:ac:12:00:02   IP/NETWORK        GATEWAY
--------------------------------------------
IPv4 settings:      172.18.0.2/16     172.18.0.1
IPv6 settings:            null/null   null

[backend]

02:42:ac:13:00:02   IP/NETWORK        GATEWAY
--------------------------------------------
IPv4 settings:      172.19.0.2/16     172.19.0.1
IPv6 settings:            null/null   null
11
ivanleoncz
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>

コンテナがデフォルトブリッジネットワークにデプロイされている場合、上記は機能します。

ただし、カスタムブリッジネットワークまたはオーバーレイネットワークを使用している場合は、以下のほうがうまくいくことがわかりました。

docker exec <containername or containerID here> /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
9
Aravind Murthy

Ko-dosの答えを拡張するために、これはすべてのコンテナ名とそのIPアドレスをリストするエイリアスです。

alias docker-ips='docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect $name | grep IPAddress | cut -d \" -f 4; done'
8
Marco Roy

Docker Toolboxを使ってDockerをインストールした場合は、Kitematicアプリケーションを使ってコンテナのIPアドレスを取得できます。

  1. コンテナを選択
  2. 設定をクリック
  3. [ポート]タブをクリックします。
7

クイックアンサー(これは動作します):

コンテナの名前またはIDを取得してください。

Sudo docker container ls

それを行います(IPを取得):

Sudo docker inspect <container_ID Or container_name> |grep 'IPAddress'

ポートを取得:

Sudo docker inspect <container_ID Or container_name> |grep 'Port'

7
Benyamin Jafari

Windows 10の場合:

docker inspect --format "{{ .NetworkSettings.IPAddress }}"  containerId
6
Hai Nguyen

コンテナのIPアドレスとホストポートを取得するには

docker inspect containerId | awk '/IPAddress/ || /HostPort/'

出力:

    "HostPort": "4200"
                    "HostPort": "4200"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.2",
                "IPAddress": "172.17.0.2",
6
Raj Asapu

NOTE !!! Docker Composeの使用法:

Docker Composeはクラスタごとに独立したネットワークを作成するため、以下のメソッドはdocker-composeでは機能しません。


最もエレガントで簡単な方法は、Shell関数を最も投票された回答として定義することです。 @ WouterD's

dockip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "[email protected]"
}

Dockerは、LinuxプログラムのようにコンテナIDをファイルに書き込むことができます。

--cidfile=filenameパラメーターを指定して実行すると、DockerはコンテナーのIDをこのファイルにダンプします。

DockerはPIDと同等のセクションを実行します

--cidfile="app.cid": Write the container ID to the file

PIDファイルを使用する

  1. --cidfileパラメータ、app.cidファイルの内容でコンテナを実行すると、以下のようになります。

a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909

  1. ファイルの内容を使ってDockerコンテナを調べることができます。

    ➜ blog-v4 git:(develop) ✗ docker inspect `cat app.cid`

  2. コンテナIPのインラインPythonスクリプトの抽出:

    $ docker inspect `cat app.cid` | python -c "import json;import sys;\ sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])" 172.17.0.2


より人間に優しい形式

#!/usr/bin/env python
# Coding: utf-8
# Save this file like get-docker-ip.py in a folder that in $PATH
# Run it with
# $ docker inspect <CONTAINER ID> | get-docker-ip.py

import json
import sys

sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])

http://networkstatic.net/10-examples-of-how-to-get-docker-container-ip-address/ /

ここではDockerコンテナのIPアドレスを取得するための10の選択肢があります。

6
guneysus

完全を期して

--format オプションは本当に好きですが、最初はそのオプションを知らなかったので、同じ結果を得るために単純なPythonワンライナーを使用しました。

docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'
5
sedi

Dockerイメージ名に基づいてコンテナーIDを見つけることと前の答えを組み合わせます。

docker inspect --format '{{ .NetworkSettings.IPAddress }}' `docker ps | grep $IMAGE_NAME | sed 's/\|/ /' | awk '{print $1}'`
4
Gene Hazan

もしあなたがコンテナIDを忘れた、あるいはシェルコマンドで操作したくないのなら、PortainerのようなUIを使うほうが良いです。

https://portainer.io/

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

そこにあなたはまたコンテナIPに関するすべての情報を見つけることができます。

4
igor

Windowsコンテナ use

docker exec <container> ipconfig

<container>はコンテナの name または id です。

docker psを使ってコンテナのIDを見つけることができます。

4
kirodge

つかいます:

docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
4
Alex Liffick

これにより、ホスト上のすべてのコンテナIPが一覧表示されます。

Sudo docker ps -aq | while read line;  do Sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done
4
rajdeepbs29

(スクリプトではなく)端末からコマンドを実行するための解決策を見つけるためにGoogleから来た人のために、 jid (オートコンプリートと提案による対話型JSONドリルダウンutil)は、より少ないタイピングで同じことを実現させます。

docker inspect $CID | jid

タイプ tab 。ネット tab そして、あなたは次のように見えるでしょう:

[Filter]> .[0].NetworkSettings
{
  "Bridge": "",
  "EndpointID": "b69eb8bd4f11d8b172c82f21ab2e501fe532e4997fc007ed1a997750396355d5",
  "Gateway": "172.17.0.1",
  "GlobalIPv6Address": "",
  "GlobalIPv6PrefixLen": 0,
  "HairpinMode": false,
  "IPAddress": "172.17.0.2",
  "IPPrefixLen": 16,
  "IPv6Gateway": "",
  "LinkLocalIPv6Address": "",
  "LinkLocalIPv6PrefixLen": 0,
  "MacAddress": "02:42:ac:11:00:02",
  "Networks": {
    "bridge": {
      "Aliases": null,
      "EndpointID": "b69eb8bd4f11d8b172c82f21ab2e501fe532e4997fc007ed1a997750396355d5",
      "Gateway": "172.17.0.1",
      "GlobalIPv6Address": "",

.IPAと入力します。 tab そして、あなたは次のように見えるでしょう:

[Filter]> .[0].NetworkSettings.IPAddress
"172.17.0.2"
4
Joel Handwell
docker inspect <container id> | grep -i ip

例えば:

docker inspect 2b0c4b617a8c | grep -i ip
3
Roman

点検は私のために働かなかった。 -net Hostといくつかの名前空間を使っていたのかもしれません。

とにかく、私はこれがうまく機能することがわかりました:

docker exec -i -t NAME /sbin/ifconfig docker0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
3
Neil McGill

展開スクリプトでさらに使用するには、docker container nameでdocker container IP Adressを抽出する必要がありました。この目的のために、私は次のbashコマンドを書きました。

docker inspect $(Sudo docker ps | grep my_container_name | head -c 12) | grep -e \"IPAddress\"\:[[:space:]]\"[0-2] | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'

引数としてmy_container_nameを使用するbashスクリプトに配置すると便利な場合があります。

3

DockerはすべてのコンテナーIPアドレスとそれぞれの名前を印刷するために使用を検査します

docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'
2
KARTHIKEYAN.A

特定のコンテナIPを取得するために特定の便利なエイリアスが必要な場合は、この回答を使用してください。

alias dockerip='f(){ docker inspect $1|grep -i "ipaddress.*[12]*\.[0-9]*"|sed -e "s/^  *//g" -e "s/[\",]//g" -e "s/[*,]//g" -e "s/[a-zA-Z: ]//g" | sort --unique;  unset -f f; }; f'

それからあなたはあなたのコンテナのIPを取得することができます

dockerip <containername>  

Containernameの代わりにcontaineridを使用することもできます。

ところで、私はそれを編集して次のように使用しています。

alias dockerips='for NAME in $(docker ps --format {{.Names}}); do echo -n "$NAME:"; docker inspect $NAME|grep -i "ipaddress.*[12]*\.[0-9]*"|sed -e "s/^  *//g" -e "s/[\",]//g" -e "s/[_=*,]//g" -e "s/[a-zA-Z: ]//g "| sort --unique;done'
2

編集: コメントに従ってPython 3.7に更新。

まだDocker Python APIを提案した人はいません。 IPアドレスを取得するDocker APIソリューションは非常に簡単です。

import docker

client = docker.DockerClient(base_url='unix://var/run/docker.sock')
x_container = client.containers(filters={"name":"x_container"})[0]
x_ip_addr = x_container["NetworkSettings"]["Networks"]["NETWORK_NAME"]["IPAddress"]

見つけるのはそれほど難しくありませんでしたが、役に立ちます。さらにこれは、さまざまなネットワーク上のコンテナに割り当てられているすべてのIPを見つけるために簡単に変更できます。

2
Procyclinsur

承認された回答は、コンテナごとに複数のネットワークを使用するとうまく機能しません。

> docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' cc54d96d63ea

172.20.0.4172.18.0.5

次の最良の答えは近いです。

> docker inspect cc54d96d63ea | grep "IPAddress"

"SecondaryIPAddresses": null,
"IPAddress": "",
    "IPAddress": "172.20.0.4",
    "IPAddress": "172.18.0.5",

私はネットワークJSONを解析するのにjqを使うのが好きです。

> docker inspect cc54d96d63ea | jq -r 'map(.NetworkSettings.Networks) []'

{
  "proxy": {
    "IPAMConfig": null,
    "Links": [
      "server1_php_1:php",
      "server1_php_1:php_1",
      "server1_php_1:server1_php_1"
    ],
    "Aliases": [
      "cc54d96d63ea",
      "web"
    ],
    "NetworkID": "7779959d7383e9cef09c970c38c24a1a6ff44695178d314e3cb646bfa30d9935",
    "EndpointID": "4ac2c26113bf10715048579dd77304008904186d9679cdbc8fcea65eee0bf13b",
    "Gateway": "172.20.0.1",
    "IPAddress": "172.20.0.4",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "02:42:ac:14:00:04",
    "DriverOpts": null
  },
  "webservers": {
    "IPAMConfig": null,
    "Links": [
      "server1_php_1:php",
      "server1_php_1:php_1",
      "server1_php_1:server1_php_1"
    ],
    "Aliases": [
      "cc54d96d63ea",
      "web"
    ],
    "NetworkID": "907a7fba8816cd0ad89b7f5603bbc91122a2dd99902b504be6af16427c11a0a6",
    "EndpointID": "7febabe380d040b96b4e795417ba0954a103ac3fd37e9f6110189d9de92fbdae",
    "Gateway": "172.18.0.1",
    "IPAddress": "172.18.0.5",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "02:42:ac:12:00:05",
    "DriverOpts": null
  }
}

すべてのコンテナのIPアドレスを一覧表示すると、次のようになります。

for s in `docker ps -q`; do
  echo `docker inspect -f "{{.Name}}" ${s}`:
  docker inspect ${s} | jq -r 'map(.NetworkSettings.Networks) []' | grep "IPAddress";
done

/server1_web_1:
    "IPAddress": "172.20.0.4",
    "IPAddress": "172.18.0.5",
/server1_php_1:
    "IPAddress": "172.20.0.3",
    "IPAddress": "172.18.0.4",
/docker-gen:
    "IPAddress": "172.18.0.3",
/nginx-proxy:
    "IPAddress": "172.20.0.2",
    "IPAddress": "172.18.0.2",
2
Drakes

このスクリプトは、さらに処理したり結果を解釈したりすることなく、実行中のすべてのコンテナのIPv4アドレスを取得します。コンテナー名も必要ない場合は、単に "echo -n $ NAME:"という行を削除してください。自動化や変数の入力に最適です。

#!/bin/sh
for NAME in $(docker ps --format {{.Names}})
do
  echo -n "$NAME:"
  docker inspect $NAME | grep -i "ip.*[12]*\.[0-9]*" | \
         sed -e 's/^  *//g' -e 's/[",]//g' -e 's/[a-zA-Z: ]//g'
done

このようにしたい場合は、エイリアスを作成することもできます。

alias dockerip='for NAME in $(docker ps --format {{.Names}}); do echo -n "$NAME:"; docker inspect $NAME|grep -i "ip.*[12]*\.[0-9]*"|sed -e "s/^  *//g" -e "s/[*,]//g" -e "s/[a-zA-Z: ]//g"'

すべてのDocker IPアドレスをすばやく確認したい場合、またはインスタンス名を入力せずに、これをdocker psファイルに追加する~/.bashrcコマンドをハッキングすることができます。

function docker-ips() {
    docker ps | while read line; do
        if `echo $line | grep -q 'CONTAINER ID'`; then
            echo -e "IP ADDRESS\t$line"
        else
            CID=$(echo $line | awk '{print $1}');
            IP=$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" $CID);
            printf "${IP}\t${line}\n"
        fi
    done;
}

これは Andrew Johnstone Docker GitHubでの提案から来ています: https://github.com/docker/docker/issues/8786

1
Nicolas Zozol
docker inspect --format "{{ .NetworkSettings.Networks.mynetwork.IPAddress }}" <containername or containerID here>

上記は、ネットワークが設定されているWindowsコンテナ用です。

docker create network mynetwork 
1
Boris

Windows PowerShellを試してください。

     docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <container id>

受け入れられた答えは正確にタイプするべきものを正確にカバーします、しかしここにマイナーな改良があります:

docker container inspect \
  --format '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' \
  $container_id_or_name

Dockerはコマンド内で名詞+動詞の構文に移動し、検査対象の曖昧さを排除するため、これはより一般的なdocker container inspectの代わりにdocker inspectを使用します。コンテナーは複数のIPアドレスを持つ複数のDockerネットワーク上にある可能性があるため、IPアドレスの後にスペースも入れました。それはあなたにとって意味のある他の文字や文字列と交換することができます。


他の値を検索する方法を知りたい人のために、私はよく以下のものを使用して、docker形式の構文をjsonに出力します。

docker container inspect --format '{{json .}}' $container_id_or_name | jq .

これを機能させるにはjqをインストールする必要があるかもしれません。あるいは、jsonを1行の長い行として読むために末尾のコマンドを省略することができます。この出力を見ると、それぞれのキー名とその親を見ることができますので、あなたが望むものを出力するためにあなた自身のフォーマット文字列を作成することができます。フォーマット構文は、 golangのテンプレート を使用して実装されています。 追加のdocker特有の関数が含まれています


基本的に、Dockerがコンテナーを作成したら、私は自分のコード展開とコンテナー構成スクリプトをロールバックしたいと思います。

私の答えの主な理由は、このコメントが私にとって大きな赤い旗を持っているということです。これは、アプリケーションを実行するのに必要なものすべてがイメージに含まれていないことを示しています。これは、コンテナーを扱うときの大きなアンチパターンです。何十年ものクライアントがいる中で、私はまだより良い選択肢を持たなかったdocker Hostからの内部IPアドレスでコンテナに直接接続するための現実的なユースケースを見つけることができていません。代わりに、実行する必要がある起動後の設定がコンテナ内にある場合、これは多くの場合エントリポイントスクリプトで行われます。

あなたがdockerのネットワークモデルを迂回しているという赤い旗もあります。 Dockerネットワーキングでは、2つの選択肢があります。まず、コンテナー間の通信では、コンテナーの再作成時に変更されるIPアドレスではなく、ユーザーが作成したネットワークと、dockerの組み込みDNSを使用して名前またはネットワーク別名でコンテナーに接続します。そして、dockerの外部からコンテナへ通信するためには、docker Hostからコンテナへポートを公開し、次にコンテナではなく直接そのポート上のHostに接続することによって行われます。この2つの方法をそのまま使用すれば、内部IPアドレスを知らなくてもアプリケーションにアクセスできるはずです。

1
BMitch

このスクリプトを確認してください: https://github.com/jakubthedeveloper/DockerIps

コンテナ名とIPを次の形式で返します。

abc_nginx 172.21.0.4
abc_php 172.21.0.5
abc_phpmyadmin 172.21.0.3
abc_mysql 172.21.0.2
0
JakubK

これは私のために働いた、私はWindows 10 Home Editionで、docker-toolbox 18.09.3で実行しています:

タイプコマンド「docker-machine ls」

λdocker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * virtualbox running tcp://192.168.98.100:2376 v18.09.6

uRL列の下に実際のIPが表示されます。例えば。 「192.168.98.100」

0
gWay