当使用docker-compose启动容器时,我如何以编程方式获取它们的ips?

时间:2016-09-27 08:31:38

标签: docker travis-ci docker-compose

在我的travis-ci中,我使用脚本逐个调用我的docker容器。我打算用docker-compose yml文件替换它们,这样可以更快更干净地执行此操作。

但我无法弄清楚如何替换我的脚本的这一部分:

- 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,我怎么能以编程方式找出各个容器的ips是什么?

2 个答案:

答案 0 :(得分:0)

我使用以下内容作为~/.local/bin/docker-ip来获取容器的IP地址。

#!/bin/bash
docker inspect -f \
    '{{range $key, $value := .NetworkSettings.Networks}} {{ $value.IPAddress}} {{end}}' $1

将此用途与通过使用<project name>_<service name>作为容器名称创建的容器一起使用。

docker-ip <CID or container name>

答案 1 :(得分:-1)

您可以在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文件中为您的容器specify an explicit IP address