在我的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是什么?
答案 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。