docker-compose图像名为:“prefix_%s_1”而不是“%s”

当我在带链接docker-compose.yaml文件中设置了两个Docker容器时,容器的名称最后是格式prefix_%s_1而不是%s ,而链接容器上的/etc/hosts的别名是一样的。

为什么redis容器的别名是test_redis_1而不是redis

这里是相关的文件和输出:

 # docker-compose.yaml monkey: build: ../../monkey dockerfile: test.Dockerfile links: - redis:redis ports: - "9006:9006" redis: build: ../storage/redis ports: - "6379:6379" 

在运行docker-compose build && docker-compose up

 $ docker-compose ps Name Command State Ports --------------------------------------------------------------------------- test_redis_1 redis-server /usr/local/et ... Up 0.0.0.0:6379->6379/tcp test_monkey_1 python -m SimpleHTTPServer ... Up 0.0.0.0:9006->9006/tcp 

test_monkey_1容器的输出:

 Step 14 : RUN cat /etc/hosts ---> Running in 1c104e3d9bf5 172.17.1.26 75a485df1325 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.1.26 thirsty_lumiere.bridge 172.17.0.220 test_redis_1 172.17.0.220 test_redis_1.bridge 172.17.1.26 thirsty_lumiere ---> 3a06bac9b3ca Removing intermediate container 1c104e3d9bf5 Step 15 : RUN echo ---> Running in a1c5b5f8ae0f ---> 385c9ee44332 Removing intermediate container a1c5b5f8ae0f Step 16 : RUN ifconfig eth0 | grep inet addr ---> Running in 17cd638c6473 inet addr:172.17.1.28 Bcast:0.0.0.0 Mask:255.255.0.0 ---> 21235e29abc1 Removing intermediate container 17cd638c6473 Step 17 : RUN echo ---> Running in 8c0b1db2a69b ---> e2dd190eb4d1 Removing intermediate container 8c0b1db2a69b Step 18 : RUN env ---> Running in 50cd1b6bf9da HOSTNAME=75a485df1325 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/data/web/tunnelbear.com/play/tPWD=/data/web/tunnelbear.com/root _=/usr/bin/env 

根据docker撰写问题#745 :

默认情况下,Compose将根据目录compose命令的基本名称运行。 项目名称可以通过为每个命令传递-p / –project-name选项或设置COMPOSE_PROJECT_NAME环境variables来覆盖。

你可以通过写这样的东西来设置你select的前缀到你的容器名称:

 $ docker-compose -p MY_PROJECT_NAME 

除非你通过-p选项设置,否则Docker compose将使用你的compose文件所在目录的名称作为项目名称

 -p, --project-name NAME Specify an alternate project name (default: directory name) 

Compose支持在位于执行docker -compose命令(当前工作目录)的文件夹中放置一个名为.env的环境文件中声明默认的环境variables 。

您想在哪里设置COMPOSE_PROJECT_NAME

这就是docker-compose名称容器,以便它可以pipe理它们。

基本名称是包含docker-compose.yaml文件的目录的名称。 接下来是在docker-compose.yaml文件中指定的容器名称,最后是一个实例编号,如果您使用类似docker-compose scale出一个容器的多个实例,则该实例编号将会增加。

这个命名scheme是docker-compose在你试图用docker-compose stop类的东西进行操作时能够识别你的容器。

我不认为这与文档有任何冲突。 也就是说,如果我从一个名为sotest的目录中,例如docker-compose.yaml sotest

 irc: image: docker.io/xena/elemental-ircd links: - web web: image: larsks/thttpd 

然后提出撰写:

 $ docker-compose up 

我得到两个容器:

 CONTAINER ID IMAGE ...NAMES 960c1491c03e docker.io/xena/elemental-ircd ...sotest_irc_1 422bba313e71 larsks/thttpd ...sotest_web_1 

如果我查看sotest_irc_1中的/etc/hosts文件,我看到:

 172.17.0.28 web 422bba313e71 sotest_web_1 

除了一些其他的名字。 所以链接的主机可以按照文档中所描述的名称使用。