很多时候,我们并没有使用docker compose的方法将多个容器集成在一起。这时候一个容器需要访问另外一个容器,或者主机需要访问容器,这个时候需要知道目的容器的ip地址,可以使用下面方法。
1 命令
1.1 获取指定容器的ip地址
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_container_id
例如:
root@VM-8-9-ubuntu:~# sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' mysql-xyang
172.17.0.2
其中,mysql-xyang是我的docker中一个容器的名称
1.2 获取所有容器的ip地址
sudo docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress}}' $(sudo docker ps -aq)"
例如:
root@VM-8-9-ubuntu:~# sudo docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress}}' $(sudo docker ps -aq)
/nginx-xyang - 172.17.0.4
/phpfpm-xyang - 172.17.0.3
/mysql-xyang - 172.17.0.2
2 简化命令
你我皆凡人,希望越简单越好,同时也是懒人,希望输入的内容越少越好【顺便提一句,其实这是个双刃剑】。好,我们来简化一下,编辑 /etc/profile 文件,让所有的login会话都可以享受这一福利。在 /etc/profile 尾部增加如下代码:
function container_ip() {
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${1}
}
alias "container_ips=sudo docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress}}' \$(sudo docker ps -aq)"
alias docker_ip=container_ip
alias docker_ips=container_ips
修改完毕之后,我们新开一个login会话过程,进行验证。
xiaobo.yang@VM-8-9-ubuntu:~$ container_ip mysql-xyang
172.17.0.2
xiaobo.yang@VM-8-9-ubuntu:~$ docker_ip mysql-xyang
172.17.0.2
xiaobo.yang@VM-8-9-ubuntu:~$ container_ips
/nginx-xyang - 172.17.0.4
/phpfpm-xyang - 172.17.0.3
/mysql-xyang - 172.17.0.2
xiaobo.yang@VM-8-9-ubuntu:~$ docker_ips
/nginx-xyang - 172.17.0.4
/phpfpm-xyang - 172.17.0.3
/mysql-xyang - 172.17.0.2
需要提醒一下的时,sudo -s 将提升到 root权限时,并不会继承 /etc/profile中的内容。需要换一个姿势: sudo -i