创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
当前回答
我的回答:
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
其他回答
将此shell脚本添加到~/.bashrc或相关文件中:
docker-ip() {
docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}
然后,要获取容器的IP地址,只需执行以下操作:
docker-ip YOUR_CONTAINER_ID
对于Docker的新版本,请使用以下内容:
docker-ip() {
docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}
如果您忘记了容器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。
基于我喜欢的一些答案,我决定将它们合并到一个函数中,以获取所有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
要获取容器的IP地址和主机端口,请执行以下操作:
docker inspect containerId | awk '/IPAddress/ || /HostPort/'
输出:
"HostPort": "4200"
"HostPort": "4200"
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
还没有人提出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。