在创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建容器,我想推出自己的代码部署和容器配置脚本。
答案 0 :(得分:1683)
检查的--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 ,请在大括号周围使用双引号"
而不是单引号'
。
答案 1 :(得分:486)
您可以使用docker inspect <container id>
示例:
CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID
答案 2 :(得分:351)
首先获取容器ID:
docker ps
(第一栏是容器ID)
使用容器ID运行:
docker inspect <container ID>
在底部,在&#34; NetworkSettings&#34;下,您可以找到&#34; IPAddress&#34;
或者只是做:
docker inspect <container id> | grep "IPAddress"
答案 3 :(得分:175)
docker inspect CONTAINER_ID | grep "IPAddress"
答案 4 :(得分:102)
只需一个命令即可获取所有容器名称及其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
答案 5 :(得分:89)
在~/.bashrc
或相关文件中添加此shell脚本:
docker-ip() {
docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}
然后,要获取容器的IP地址,只需执行以下操作:
docker-ip YOUR_CONTAINER_ID
对于新版本的Docker,请使用以下内容:
docker-ip() {
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}
答案 6 :(得分:34)
显示所有容器的IP地址:
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
答案 7 :(得分:30)
在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
答案 8 :(得分:22)
从Docker版本1.10.3开始,构建20f81dd
除非你告诉Docker,否则Docker总是在桥接网络中启动你的容器。所以你可以尝试下面这个命令:
docker network inspect bridge
然后应该返回一个Containers部分,该部分将显示该正在运行的容器的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"
}
}
]
答案 9 :(得分:21)
执行:
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
使用CONTAINER ID值:
docker inspect <CONTAINER ID> | grep -w "IPAddress" | awk '{ print $2 }' | head -n 1 | cut -d "," -f1
“172.17.0.2”
答案 10 :(得分:18)
基于我喜欢的一些答案,我决定将它们合并到一个函数中以获取所有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
答案 11 :(得分:16)
按名称引用容器:
docker run ... --name pg-master
然后按名称获取IP地址:
MASTER_HOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' pg-master)
答案 12 :(得分:13)
Docker是在Go内部构建的,它也使用Go语法进行查询。
要检查特定容器的IP地址,您需要运行命令(-f表示格式选项)
DAO360
对于容器ID或名称,您可以运行命令docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_id_or_name
。
它将列出每个正在运行的容器。
答案 13 :(得分:13)
我编写了以下Bash脚本,以获取在docker-compose
下运行的所有容器的IP地址表。
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
}
您应该将变量网络更改为您自己的网络名称。
答案 14 :(得分:11)
这是我今天用Python开发的解决方案,使用&#34; docker inspect container&#34; 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
答案 15 :(得分:9)
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}'
答案 16 :(得分:8)
我用这种简单的方法
docker exec -it <container id or name> hostname -i
例如
ubuntu@myhost:~$ docker exec -it 3d618ac670fe hostname -i
10.0.1.5
答案 17 :(得分:8)
扩展ko-dos&#39;回答,这里是列出所有容器名称及其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'
答案 18 :(得分:7)
sudo docker container ls
sudo docker inspect <container_ID Or container_name> |grep 'IPAddress'
sudo docker inspect <container_ID Or container_name> |grep 'Port'
答案 19 :(得分:7)
如果您使用Docker Toolbox安装了Docker,则可以使用Kitematic应用程序获取容器IP地址:
答案 20 :(得分:6)
获取容器的IP地址和主机端口:
docker inspect containerId | awk '/IPAddress/ || /HostPort/'
输出:
"HostPort": "4200"
"HostPort": "4200"
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
答案 21 :(得分:6)
对于Windows 10:
docker inspect --format "{{ .NetworkSettings.IPAddress }}" containerId
答案 22 :(得分:6)
注意!!!对于Docker撰写用法:
由于Docker Compose为每个群集创建了一个独立的网络,因此以下方法不适用于docker-compose
。
最优雅,最简单的方法是将shell函数定义为投票最多的答案@WouterD's:
dockip() {
docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}
Docker可以将容器ID写入Linux程序之类的文件:
使用--cidfile=filename
参数运行,Docker将容器的ID转储到此文件。
Docker runs PID equivalent Section
--cidfile="app.cid": Write the container ID to the file
--cidfile
参数运行容器,app.cid
文件内容如下所示: a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
您可以使用文件内容来检查Docker容器:
➜ blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
提取Container 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/
这里有10种获取Docker容器IP地址的替代方案。
答案 23 :(得分:5)
为了完整性:
我非常喜欢 - 格式选项,但起初我并不知道这个选项,所以我使用了一个简单的Python单行来获得相同的结果:
docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'
答案 24 :(得分:4)
如果您忘记了容器ID或者不想使用shell命令进行操作,最好使用像Portainer这样的UI。
$ 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。
答案 25 :(得分:4)
这将列出主机上的所有容器IP:
sudo docker ps -aq | while read line; do sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done
答案 26 :(得分:4)
对于 Windows容器,请使用
docker exec <container> ipconfig
其中<container>
是容器的名称或 id 。
您可以使用docker ps
查找容器的ID。
答案 27 :(得分:4)
我的答案:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} %tab% {{.Name}}' $(docker ps -aq
) | sed 's#%tab%#\t#g' | sed 's#/##g' | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n
也作为bash别名:
docker-ips() { docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} %tab% {{.Name}}' $(docker ps -aq) | sed 's#%tab%#\t#g' | sed 's#/##g' | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n }
输出按IP地址排序,并用制表符分隔:
# docker-ips
172.18.0.2 memcached
172.18.0.3 nginx
172.18.0.4 fpm-backup
172.18.0.5 dns
172.18.0.6 fpm-beta
172.18.0.7 exim
172.18.0.8 fpm-delta
172.18.0.9 mariadb
172.18.0.10 fpm-alpha
172.19.0.2 nextcloud-redis
172.19.0.3 nextcloud-db
172.19.0.4 nextcloud
答案 28 :(得分:4)
对于那些来自Google的人来说,从终端(而不是通过脚本)找到命令执行的解决方案,jid(具有自动完成和建议的交互式JSON向下钻取工具)可以让您通过更少的输入实现相同的功能。
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"
答案 29 :(得分:4)
使用:
docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
答案 30 :(得分:4)
将先前的答案与根据Docker图像名称查找容器ID结合起来。
docker inspect --format '{{ .NetworkSettings.IPAddress }}' `docker ps | grep $IMAGE_NAME | sed 's/\|/ /' | awk '{print $1}'`
答案 31 :(得分:3)
我必须通过docker容器名称提取docker容器IP地址,以便在部署脚本中进一步使用。 为此,我编写了以下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\}'
假设把它放在一个bash脚本中会很方便,它会将my_container_name作为参数...
答案 32 :(得分:3)
检查没有为我工作。也许正如我使用-net host
和一些名称空间。
无论如何,我发现这很好用:
docker exec -i -t NAME /sbin/ifconfig docker0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
答案 33 :(得分:3)
docker inspect 2b0c4b617a8c | grep -i ip
例如:
val LOGGER : Logger = LoggerFactory.getLogger(Foo::class.java);
答案 34 :(得分:2)
可接受的答案不适用于每个容器多个网络:
> 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",
我喜欢使用jq
来解析网络JSON:
> 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",
答案 35 :(得分:2)
此脚本将获取所有正在运行的容器的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"'
答案 36 :(得分:2)
Docker inspect用于打印所有容器ip及其各自的名称
docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'
答案 37 :(得分:2)
如果您需要特定的便捷别名来获取特定的容器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>
您还可以使用containerid代替containername
BTW接受了一个很好的答案,确实产生了干净的输出,因此我对其进行了编辑并像这样使用;
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'
答案 38 :(得分: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。
答案 39 :(得分:1)
可接受的答案完全可以很好地键入内容,但这是一个小改进:
docker container inspect \
--format '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' \
$container_id_or_name
这将使用docker container inspect
而不是更通用的docker inspect
,因为docker在其命令中移至名词+动词语法,并消除了所检查内容的歧义。我还在IP地址后添加了一个空格,因为容器可以位于一个以上具有多个IP地址的docker网络上。可以将其替换为您认为有意义的任何其他字符或字符串。
对于那些想知道如何查找其他值的人,我经常使用以下内容将任何docker格式的语法输出到json中:
docker container inspect --format '{{json .}}' $container_id_or_name | jq .
您可能需要安装jq
才能正常工作,或者可以省略尾随命令以将json作为单个长行读取。查看此输出时,您可以看到每个键名及其父级,因此可以创建自己的格式字符串以输出所需的任何内容。格式语法是通过golang's template和一些extra docker specific functions included实现的。
基本上,一旦Docker创建了容器,我想滚动自己的代码部署和容器配置脚本。
我回答的主要原因是此评论对我来说是一个巨大的危险信号。它表明您的图像不包含运行应用程序所需的所有内容,这是处理容器时的一大反模式。多年来,有十几个客户,我还没有找到一个真实的用例,它可以通过没有更好选择的docker主机的内部IP地址直接连接到容器。相反,如果容器中需要运行启动后配置,则通常使用入口点脚本来完成。
还有一个红旗表示您正在绕过docker的网络模型。使用docker联网,有两种选择。首先,在容器之间进行通信时,这是通过用户创建的网络并使用docker的内置DNS通过名称或网络别名(而不是通过在重新创建容器时会更改的IP地址)连接到容器来完成的。对于从docker外部与容器进行通信,这是通过将端口从docker主机发布到容器,然后连接到该端口上的主机而不是直接连接到容器来完成的。如果坚持使用这两个选项,则应该可以在不知道其内部IP地址的情况下访问应用程序。
答案 40 :(得分:1)
如果您想快速查看所有Docker IP地址,或者没有输入实例名称,可以使用SELECT FROM rent
WHERE FORALL cars EXISTS Daterent
命令将其添加到docker ps
文件中:
~/.bashrc
这来自Andrew Johnstone在Docker GitHub的提案: https://github.com/docker/docker/issues/8786
答案 41 :(得分:1)
docker inspect --format "{{ .NetworkSettings.Networks.mynetwork.IPAddress }}" <containername or containerID here>
以上内容适用于已使用
设置了网络的Windows容器docker create network mynetwork
答案 42 :(得分:1)
另一个经典的解决方案:
docker ps -aq | xargs docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}'
答案 43 :(得分:1)
我在多网络环境中遇到了麻烦,因此这是一个更加动态的版本
for N in $(docker-compose ps -q) ; do echo "$(docker inspect -f '{{.Config.Hostname}}' ${N}) $(docker inspect -f '{{range $i, $value := .NetworkSettings.Networks}} [{{$i}}:{{.IPAddress}}]{{end}}' ${N})"; done
输出
containerA [networkA:192.168.1.4] [networkB:192.168.2.4]
containerB [networkA:192.168.1.5]
要获取所有正在运行的容器,请替换第一个命令
for N in $(docker-compose ps -q)
使用
for N in $(docker container ls | awk 'NR>=2' | cut -c1-12 );
docker inspect --format='{{range $i, $value := .NetworkSettings.Networks}}{{if eq $i "NETWORKNAME"}}{{.IPAddress}}{{end}}{{end}}' CONTAINERNAME
输出
192.168.1.4
for N in $(docker-compose ps -q) ; do echo "$(docker inspect -f '{{.Config.Hostname}}' ${N}) $(docker inspect -f '{{range $i, $value := .NetworkSettings.Networks}}{{if eq $i "intranet"}}{{.IPAddress}}{{end}}{{end}}' ${N})"; done
输出
containerA 192.168.1.4
containerB 192.168.1.5
for N in $(docker-compose ps -q) ; do echo " $(docker inspect -f '{{range $i, $value := .NetworkSettings.Networks}}{{if eq $i "intranet"}}{{.IPAddress}}{{end}}{{end}}' ${N})"; done
输出
192.168.1.4
192.168.1.5
答案 44 :(得分:1)
尝试使用Windows PowerShell:
docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <container id>
答案 45 :(得分:0)
检查此脚本: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
答案 46 :(得分:0)
这对我有用,我在Windows 10家庭版的docker-toolbox 18.09.3上运行:
输入命令'docker-machine ls'
λdocker-machine ls 名称活动的驱动程序状态URL群集DOCKER错误 默认* virtualbox运行tcp://192.168.98.100:2376 v18.09.6
它将在URL列下显示实际IP。例如。 '192.168.98.100'
答案 47 :(得分:0)
使用if(document.getElementById('editeur2')){
CKEDITOR.replace('editeur2', {extraPlugins: 'imagebase',removePlugins: 'image', customConfig: '/extranet/js/ckeditor_config.js' } );
}
CKEDITOR.config.defaultLanguage = "fr";
CKEDITOR.extraPlugins = 'imagebase';
CKEDITOR.config.removeDialogTabs = 'image:advanced;image:Link';
CKEDITOR.config.imageShowLinkTab = false;
CKEDITOR.config.filebrowserBrowseUrl = '/extranet/image_browser.php';
CKEDITOR.config.disableNativeSpellChecker = false;
CKEDITOR.config.BrowserContextMenuOnCtrl = false;
CKEDITOR.config.enableContextMenu = false;
CKEDITOR.config.removePlugins = "contextmenu,tabletools,tableselection";
新的Python
:
API
答案 48 :(得分:0)
有多种方法可以从主机获取容器的IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' containerID
如果您不记得上面的命令,可以随时执行以下操作
docker inspect containerID
返回信息后,它将返回有关Docker对象的低级信息,寻找"Networks"
,并在其中找到"IPAddress"
的容器
答案 49 :(得分:-1)
rspec
加
减
答案 50 :(得分:-1)
docker inspect <container id> | grep -i "ipaddress"
答案 51 :(得分:-6)
for containerId in $(sudo docker ps -a | cut -f1 -d' ' | grep -v CONTAINER); do
echo " ContainerId - $containerId >> $(sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' $containerId) "
done