创建新容器后,是否可以运行命令从主机获取容器的IP地址?

基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。


当前回答

仅为完整起见:

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

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

其他回答

还没有人提出Docker Python API。Docker API获取IP地址的解决方案相当简单。

*基于NIX的操作系统:dockerapi3.7(由于canadadry的评论而更新)

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

OS不可知:dockerapi4.0.x(由于评论中的pds而添加)

import docker

client = docker.from_env()
container = client.containers.get(container_name)
vars( container )["attrs"]["NetworkSettings"]["Networks"]["<NETWORK_NAME>"]["IPAddress"]

不太难找到,但很有用。此外,这可以很容易地修改,以查找分配给各种网络上的容器的所有IP。

如果您使用的是Windows,您可能无法从docker inspect获得任何信息,在这种情况下,您最好的选择是实际使用ipconfig/all并查找以太网适配器vEthernet(WSL):部分,在该部分您可以看到IPv4地址…:xxx.xxx.xxx.xxx(首选)-这将是您可以在本地浏览器的url中使用的IP。

仅为完整起见:

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

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

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