docker-compose的文档似乎暗示您唯一需要定义COMPOSE_PROJECT_NAME
的时间是您想要控制docker-compose文件中资源的前缀。
https://docs.docker.com/compose/reference/envvars/#compose_project_name
但是,我发现此变量还有另一个功能。
在实验中,我发现为了使用docker-compose ps
并查看与docker-compose up
一起运行的容器,必须确保在运行时在环境中定义了相同的COMPOSE_PROJECT_NAME
ps
,然后就像您运行up
导出之前:
user@host:$ docker-compose ps
-- Empty Result --
导出后:
user@host:$ export COMPOSE_PROJECT_NAME=example-devops-docker
user@host:$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
example_devops_docker /bin/sh -c entrypoint.sh Up 0.0.0.0:12312->80/tcp
此外,我发现,如果您在另一个项目中运行docker-compose down
之后运行docker-compose up
,则在两个项目具有相同的文件夹名称的情况下,这些项目会相互冲突。
我在主目录中没有找到docker-compose的任何配置,转储环境也没有发现任何可能暗示我两个项目之间docker-compose混淆的docker-compose变量
当前,我倾向于认为docker-compose通过这些资源上的标签来管理docker资源。由于docker inspect $container name
揭示了以下内容
"Labels": {
"com.docker.compose.config-hash": "7f20a609dc9f9cf3ea580f802586fe0996e9d05ac720949b142a4841e30f0dba",
"com.docker.compose.container-number": "1",
"com.docker.compose.oneoff": "False",
"com.docker.compose.project": "exampledevopsdocker",
"com.docker.compose.service": "app",
"com.docker.compose.version": "1.11.2"
}
我的问题是,是否有人知道docker-compose如何存储有关最后一个docker-compose up
环境的信息,以及该信息如何在终端之间传输。
我目前的理论是,com.docker.compose.project
标签的设置与您是否手动命名容器无关,并且如果您未明确指定COMPOSE_PROJECT_NAME
,则此标签基于您的目录名称。
因此,每次我从文件夹内部向下进行docker-compose时,它都会基于文件夹名称生成一个ID,并在其标签内降低该ID的docker资源。