当使用docker-compose来启动容器时,我如何以编程方式获取它们的ips?
在我的travis-ci中,我正在使用脚本逐个调用我的Docker容器。 我打算用docker-compose
yml文件replace这些文件,这样可以更快,更干净地完成这个任务。
我不知道如何replace我的脚本的这部分:
- CID=$(docker run --privileged --detach --volume="${PWD}":/root/django_deployment:rw -p 80 --name test_centos censofdockers/centos6-miniconda sleep 550) - CID2=$(docker run --privileged --detach --volume="${PWD}":/root/django_deployment:rw -p 80 --name test_ubuntu censofdockers/ubuntu-miniconda sleep 550) - DOCKER_IP=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}` - DOCKER_IP2=`docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID2}`
如果我使用docker-compose,我怎样才能找出每个容器的Iips是什么?
我用~/.local/bin/docker-ip
来获取容器的IP地址。
#!/bin/bash docker inspect -f \ '{{range $key, $value := .NetworkSettings.Networks}} {{ $value.IPAddress}} {{end}}' $1
要将此与通过编写创build的容器一起使用,请使用<project name>_<service name>
作为容器名称。
docker-ip <CID or container name>
你可以在你的Compose YAML中通过给容器一个显式的container_name
来做到这一点:
ub1: image: ubuntu command: ping localhost container_name: ub1 ub2: image: ubuntu command: ping localhost container_name: ub2
然后,当你使用docker-compose up
应用程序时,容器将会有一个已知的名字,你可以使用它来检查它们:
> docker inspect --format '{{ .NetworkSettings.IPAddress }}' ub1 172.18.0.2 > docker inspect --format '{{ .NetworkSettings.IPAddress }}' ub2 172.18.0.3
注意:使用container_name
意味着Compose将只允许你有一个容器实例,所以你不能使用scale
,但是在你的场景中看起来不是一个问题。
或者,您可以在Compose文件中指定容器的显式IP地址 。