如何获得来自主机的泊坞容器的IP地址?如何获得来自主机的泊坞容器的IP地址?(How to get

2019-05-08 16:54发布

是否有一个命令,我可以运行在创建新容器后能得到来自主机的容器的IP地址吗?

基本上,一旦码头工人创造的容器,我想推出自己的代码部署和容器配置脚本。

Answer 1:

--format检查的选项就派上用场了。

现代码头工人客户端语法:

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

老码头工人客户端语法:

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

这将只返回的IP地址。

正如在评论中提到:如果你是在Windows上,使用双引号" ,而不是单引号'周围的花括号。



Answer 2:

您可以使用docker inspect <container id>

例:

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


Answer 3:

首先获取容器ID:

docker ps

(第一列是用于容器ID)

使用容器ID运行:

docker inspect <container ID>

在底部,在“NetworkSettings已”,你可以找到“ip地址”

或者只是做:

docker inspect <container id> | grep "IPAddress"


Answer 4:

docker inspect CONTAINER_ID | grep "IPAddress"



Answer 5:

为了让所有的容器名称和它们的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


Answer 6:

在您添加这个shell脚本~/.bashrc或相关文件:

docker-ip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}

然后,为了获取容器的IP地址,只要做到这一点:

docker-ip YOUR_CONTAINER_ID

对于泊坞窗的新版本,请使用以下命令:

docker-ip() {
        docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}


Answer 7:

显示所有集装箱的IP地址:

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


Answer 8:

在泊坞1.3+,您也可以通过下面的步骤检查:

进入运行泊坞窗:

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


Answer 9:

执行:

docker ps -a

这将显示活性搬运工图像:

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

使用容器ID值:

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

“172.17.0.2”



Answer 10:

由于码头工人版本1.10.3,构建20f81dd

除非你告诉码头工人,否则,码头工人总是启动桥接网络中的容器。 所以,你可以试试下面这个命令:

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"
        }
    }
]


Answer 11:

基于一些我喜欢的答案,我决定将它们合并到一个函数来获取所有的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}}' "$@"
}

第一个命令给所有的容器和第二特定容器的IP地址的IP地址。

docker-ips
docker-ip YOUR_CONTAINER_ID


Answer 12:

参考容器的名字:

docker run ... --name pg-master

然后抓住按名称的IP地址,地址:

MASTER_HOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' pg-master)


Answer 13:

我写了下面的bash脚本来获得IP的表从下运行的所有集装箱地址docker-compose

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 }}" "$@"
}

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
}

您应变量网络更改为您自己的网络名称。



Answer 14:

码头工人在进入内部进行,它使用去查询目的语法了。

对于检查有关特定容器的IP地址,你需要运行命令(-f用于格式化选项)

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

对于集装箱的ID或名字,可以运行命令docker container ls 。 它会列出每个的运行容器。



Answer 15:

这里的是我在Python发达的今天,使用的解决方案“泊坞窗检查容器” JSON输出作为数据源。

我有很多集装箱和我有检查的基础设施,我需要从任何容器获得基本的网络信息,以快速和漂亮的方式。 这就是为什么我做了这个剧本。

重要提示:由于1.9版本,泊坞窗允许您创建多个网络,并将它们连接到容器。

#!/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


Answer 16:

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


Answer 17:

为了延长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'


Answer 18:

如果您在使用泊坞窗工具箱安装泊坞窗,可以使用Kitematic应用程序获取容器的IP地址:

  1. 选择容器
  2. 点击设置
  3. 单击端口选项卡。


Answer 19:

注意!!! 对码头工人撰写用法:

因为泊坞撰写创建为每个群集的隔离网络中,该方法在下面不与工作docker-compose


最优雅,最简单的方法是定义一个shell函数作为最投票answer @ WouterD的 :

dockip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}

泊坞窗可以写容器的id像Linux程序文件:

与运行--cidfile=filename参数,转储多克尔容器的ID到该文件。

泊坞窗运行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/

这里有让泊坞窗容器IP地址的10层的替代品。



Answer 20:

对于Windows 10:

docker inspect --format "{{ .NetworkSettings.IPAddress }}"  containerId


Answer 21:

快速回答(这工作):

让你的容器名或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'



Answer 22:

只是为了完整性:

我真的很喜欢--format选项,但一开始我不知道该选项的,所以我用一个简单的Python的一行来得到相同的结果:

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


Answer 23:

为了得到一个容器的IP地址和主机端口:

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

输出:

    "HostPort": "4200"
                    "HostPort": "4200"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.2",
                "IPAddress": "172.17.0.2",


Answer 24:

以前的答案与求解基于泊坞窗图像名称容器ID结合。

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


Answer 25:

对于那些谁从谷歌来找从终端命令执行的解决方案(不是脚本), JID (一种交互式的JSON向下钻取UTIL与自动完成和建议)让你实现同样的事情少打字。

docker inspect $CID | jid

键入标签 .NET 选项卡 ,你会看到以下内容:

[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 标签 ,你会看到以下内容:

[Filter]> .[0].NetworkSettings.IPAddress
"172.17.0.2"


Answer 26:

使用:

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


Answer 27:

对于Windows容器中使用

docker exec <container> ipconfig

其中<container>名称或容器的ID。

您可以使用docker ps找到容器的id。



Answer 28:

如果您忘记容器ID或不想用shell命令来处理,这是更好地使用UI像Portainer。

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的所有信息。



Answer 29:

这会列出该主机上的所有IP地址的容器:

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


Answer 30:

检查我没有工作。 也许因为我是用-net host和一些命名空间。

无论如何,我发现这很好地工作:

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


文章来源: How to get a Docker container's IP address from the host?
标签: docker