当我在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
答案 0 :(得分:12)
默认情况下,Compose以项目名称为基础 目录撰写命令从中运行。项目名称可以是 通过为每个选项传递-p / --project-name选项来覆盖 命令或设置COMPOSE_PROJECT_NAME环境变量。
您可以通过写下这样的内容将您选择的前缀设置为容器名称:
$ docker-compose -p MY_PROJECT_NAME
答案 1 :(得分:6)
您可以通过container_name
将容器名称设置为您想要的名称:
redis:
build: ../storage/redis
container_name: redis
ports:
- "6379:6379"
也可以通过hostname
设置容器主机名。
答案 2 :(得分:4)
Docker撰写将使用您的撰写文件的目录名称作为项目名称,除非您通过-p option
设置-p, --project-name NAME Specify an alternate project name (default: directory name)
撰写支持声明放置在执行docker-compose命令的文件夹中的default environment variables in an environment file named .env(当前工作目录)。
的位置答案 3 :(得分:3)
这就是docker-compose如何命名容器,以便它可以管理它们。
basename是包含docker-compose.yaml
文件的目录的名称。接下来是docker-compose.yaml
文件中指定的容器名称,最后是一个实例编号,如果使用docker-compose scale
之类的东西调出容器的多个实例,则会增加该实例编号。 / p>
此命名方案是当您尝试使用docker-compose stop
之类的操作对其进行操作时,docker-compose能够识别您的容器。
我不认为这与文档有任何冲突。也就是说,如果我在名为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
如果我查看/etc/hosts
内的sotest_irc_1
文件,我会看到:
172.17.0.28 web 422bba313e71 sotest_web_1
除了许多其他名称。所以链接的主机是 按文档中的描述按名称提供。