代码之家  ›  专栏  ›  技术社区  ›  user22155685

如何根据docker-compose.yml中的环境有条件地运行容器

  •  0
  • user22155685  · 技术社区  · 2 年前

    在ASP。NET核心世界,我们有 appsettings.{environment}.json ,在docker的世界里,我们有类似的东西吗?

    我的情况是,我有一个 docker-compose.yml 启动几个容器服务的文件。但在集成测试期间,我想启动一个额外的容器服务,仅用于集成测试。我知道我不能用 .env 文件,以指定要在中使用的环境 docker-compose.yml 文件但我不希望在非集成环境中创建和启动指定的容器服务,这意味着我不希望启动容器并根据从 .env 文件,我想要 docker-compose.yml completed忽略了非集成环境的容器服务。

    是不是有点像 docker-compose-{environment}.yml 喜欢 应用程序设置。{environment}.json 可以合并的?

    2 回复  |  直到 2 年前
        1
  •  2
  •   Chris Becke    2 年前

    Docker Compose Profiles 用于解决此问题。

    使用链接文档中的示例,将调试容器分配给特定的配置文件:

    compose.yaml

    services:
      backend:
        image: backend
    
      db:
        image: mysql
    
      tests:
        image: tests
        depends_on:
          - db
        profiles:
          - debug
    

    用一个 compose.yaml 这样构造,您可以通过省略目标概要文件来启动默认服务,也可以通过指定概要文件名称来启动特定服务。

    # Only start backend and db
    $ docker compose up -d
    
    # Starts backend and db and tests
    $ docker compose up -d --profile debug
    
        2
  •  0
  •   sinammd    2 年前

    docker compose或Dockerfile没有处理条件的机制。 有两种方法可以处理docker相关文件中的条件。 首先,使用两个不同的env文件,如 .env .env.example ,并指向 .env.example 在第二个运行集成测试的容器中,如果容器在测试模式下运行,则可以使用bash文件并覆盖容器内的环境。不要忘记,当您指向docker compose中的环境文件时,docker会将所有环境设置为容器中的os环境。

    推荐文章