同一docker compose服务位于多个文件夹中
我有一个包(同一docker compose服务位于多个文件夹中,docker,docker-compose,Docker,Docker Compose,我有一个包(bootstrap),它包含在多个本地项目中。例如: project1/: src/... tests/... vendor/bootstrap/... project2/: src/... tests/... vendor/bootstrap/... 这个包有它的内部测试和静态代码分析器,我想在每个projectX/vendor/bootstrap文件夹中运行它们。测试和分析器从docker容器中运行。也就是说,bootstrap
bootstrap
),它包含在多个本地项目中。例如:
project1/:
src/...
tests/...
vendor/bootstrap/...
project2/:
src/...
tests/...
vendor/bootstrap/...
这个包有它的内部测试和静态代码分析器,我想在每个projectX/vendor/bootstrap
文件夹中运行它们。测试和分析器从docker容器中运行。也就是说,bootstrap具有docker compose.yml
和一些配置:
version: '3.7'
services:
cli:
build: docker/cli
working_dir: /app
volumes:
- ./:/app
tty: true
问题是当我在project1/vendor/bootstrap
中运行某个东西,然后切换到project2/vendor/bootstrap
并在那里运行某个东西时,docker认为我从project1执行容器。我相信这是因为Docker Compose与Docker Compose生成的容器名称相同,即[folder-name\u service-name]
。因此,当我运行docker compose exec cli sh
时,它会检查是否有正在运行的容器bootstrap\u cli
,但它可以在另一个项目的另一个bootstrap
文件夹中创建。
docker ps
示例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
128c3e834df4 bootstrap_cli "docker-php-entrypoi…" 55 minutes ago Up 55 minutes bootstrap_cli
名称
对于所有这些projectX文件夹中的容器都是相同的
有一个选项可以添加容器\u name:bootstrap\u project1\u cli
,但Docker Compose在搜索正在运行的容器时似乎忽略了它
那么,是否可以区分相同名称的容器并同时拥有所有容器?看看github的问题: 有两个选项可以设置COMPOSE_项目名称。使用
-p
命令行标志或COMPOSE\u PROJECT\u NAME
环境变量。此处记录了这两种情况:
运行docker compose时,它需要容器的项目名称。如果不指定-p选项,docker compose将查找名为compose\u PROJECT\u NAME的环境变量。如果两者都未设置,则默认为当前工作目录。这就是你的行为
如果不想添加命令行参数,可以在docker compose文件目录中的
.env
文件中指定环境变量。请参见docker compose基本上只是docker cli的包装器。它通过在容器(网络和卷)前面加上compose\u PROJECT\u NAME
值,为compose文件中的服务提供了一些基本范围。如果未进行不同配置,则此值对应于撰写文件的目录名。您可以通过设置相应的环境变量来覆盖它。一个简单的解决方案是将.env
文件放入包含如下指令的引导目录中
COMPOSE_PROJECT_NAME=project1_bootstrap
这将导致自动生成容器名称,例如project1\u bootstrap\u cli\u 1
详情: