创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
当前回答
仅为完整起见:
我真的很喜欢--format选项,但一开始我不知道它,所以我使用了一个简单的Python单行程序来获得相同的结果:
docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'
其他回答
没有人提及的最佳方法是为容器分配主机名。
docker run -d --hostname localcontainerhostname imageName
这将为您提供ip地址,但您可能还是希望使用主机名
nslookup localcontainerhostname
在Windows PowerShell中尝试:
docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <container id>
如果您忘记了容器ID或不想使用shell命令进行操作,最好使用像Portiner这样的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。
这对我有用,我正在运行docker工具箱18.09.3,在windows 10家庭版:
键入命令“docker machine ls”
λdocker机器lsNAME活动驱动程序状态URL群集DOCKER错误default*virtualbox正在运行tcp://192.168.98.100:2376版本8.09.6
它将在URL列下显示实际IP。例如,“192.168.98.100”
使用任意字符串提取IP:
我在这个问题中读到的许多(几乎所有)解决方案都需要用户首先识别<容器名称>或<容器ID>,然后将其提供给他们的解决方案以显示IP的中间步骤。
当容器被重新创建时,IP可以改变,如果发生这种情况,引用它的任何脚本现在都将被破坏。。。。
因此,我需要一种无需手动干预即可提取容器IP的方法,确保脚本始终具有正确的IP,即使每次重新创建容器时都会更改。
解决方案:
#!/bin/bash
# Only need to set "CONTAINERNAME" variable with an arbitrary
# string found in either the Container ID or Image Name and
# it prints container IP. Ensure the string is unique to desired host
CONTAINERNAME='mariadb-blog'
CONTAINERID="$(docker ps | grep -i $CONTAINERNAME | awk '{print $1}')"
CONTAINERIP="$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINERID)"
echo "$CONTAINERIP"
结论:
我已经用自己的Linux Docker Compose主机测试了这个脚本,截至20220722年,它运行可靠。事实上,很容易复制并粘贴脚本,以验证我的结果是否可复制。
请注意:有一个潜在的可靠性弱点:如果你不剪切自己的docker图像并依赖第三方的图像,他们可能会更改图像的命名惯例,并打破脚本中的grep。因此,我建议将任意字符串设置为ContainerName,因为您可以控制它,确保字符串的grep始终成功,并打印IP以提供给脚本。