当使用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地址 。