【问题标题】:The same docker compose service in multiple folders同一个 docker compose 服务在多个文件夹中
【发布时间】:2020-11-23 12:28:45
【问题描述】:

我有一个包含在多个本地项目中的包 (bootstrap)。示例:

project1/:
    src/...
    tests/...
    vendor/bootstrap/...

project2/:
    src/...
    tests/...
    vendor/bootstrap/...

这个包有它的内部测试和静态代码分析器,我想在每个projectX/vendor/bootstrap 文件夹中运行它们。测试和分析器从 docker 容器运行。 IE。 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 相同的文件夹名称生成容器名称为[folder-name_service-name]。因此,当我运行docker-compose exec cli sh 时,它会检查是否有一个正在运行的容器bootstrap_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

NAMES 对于所有这些 projectX 文件夹中的容器都是相同的。

有一个选项可以添加container_name: bootstrap_project1_cli,但似乎 Docker Compose 在搜索正在运行的容器时会忽略它。

那么是否可以区分同名容器并同时拥有所有容器?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    看看这个 github 问题: https://github.com/docker/compose/issues/2120

    有两个选项可以设置 COMPOSE_PROJECT_NAME。使用-p 命令行标志或COMPOSE_PROJECT_NAME 环境变量。两者都记录在这里:https://docs.docker.com/compose/reference/overview/#compose-project-name

    当您运行 docker-compose 时,它​​需要容器的项目名称。如果不指定 -p 选项,docker-compose 会查找名为 COMPOSE_PROJECT_NAME 的环境变量。如果两者都未设置,则默认为当前工作目录。这就是你的行为。

    如果您不想添加命令行参数,可以在 docker compose 文件目录中的 .env 文件中指定环境变量。见https://docs.docker.com/compose/env-file/

    【讨论】:

      【解决方案2】:

      docker-compose 基本上只是 docker cli 的一个包装器。它通过在容器(也包括网络和卷)前面加上 COMPOSE_PROJECT_NAME 值来为 compose 文件中的服务提供一些基本的作用域。如果没有进行不同的配置,这个值对应于撰写文件的目录名。您可以通过设置相应的环境变量来覆盖它。一个简单的解决方案是将.env 文件放入包含类似指令的引导目录中

      COMPOSE_PROJECT_NAME=project1_bootstrap
      

      这将导致自动生成的容器名称,例如project1_bootstrap_cli_1

      详情:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-28
        • 2021-06-07
        • 1970-01-01
        • 2019-02-22
        • 2022-01-05
        相关资源
        最近更新 更多