在另一个撰写文件中导入docker撰写文件

时间:2019-04-12 11:11:32

标签: docker docker-compose

是否可以将docker-compose文件“导入”或链接到另一个docker-compose文件?

假设我有两个文件:

# docker-compose-1.yml
services:
    A:
        # config
    B:
        # config
# docker-compose-2.yml
services:
    C:
        # config
    import: docker-compose-1.yml

通过运行docker-compose -f docker-compose-2.yml up,我想启动容器A,B(在导入的文件中指定)和C。是否可以这样做,而不必用-f参数链接两个文件? / p>

1 个答案:

答案 0 :(得分:1)

通过扩展

可以扩展或使用多个docker-compose文件及其服务,并将它们链接到一个文件中。您可以查看this link来了解多个撰写文件的其他用法。但是,如前所述,如果没有链接相关的文件,您将无法包含该文件。

在这里,我定义了common-services.yaml:

version: '2'
    services:
    nginx_a:
        image: nginx:latest
        container_name: nginx
        ports:
         - 81:80
         - 1443:443

然后我创建了一个docker-compose.yml,并包含common-services.yml文件及其自身的服务。

services:
   nginx:
     extends:
         file: common-services.yml
         service: nginx_a

   nginx_b:
      image: nginx:latest
      container_name: nginx_b
      volumes:
      ports:
       - 82:80
       - 2443:443

通过.env技术

如果要避免链接使用多个文件,还可以使用a technique和.env文件。我将使用.env技术重写前面的示例。

COMPOSE_PATH_SEPARATOR=:
COMPOSE_FILE=common-services.yml:docker-compose.yml

让我们在common-services.yml中添加另一个服务作为示例

 version: '2'
 services:
   ngin_a:
     image: nginx:latest
     container_name: nginx_a
     ports:
       - 81:80
       - 1443:443

   redis_c:
     image: redis:latest
     container_name: redis_c
     ports:
       - 6381:6380

最后,将它们全部加载到docker-compose文件中,而不会在这些服务中提及事件。

version: '2'
 services:
   nginx_b:
     image: nginx:latest
     container_name: nginx_b
     ports:
       - 82:80
       - 2443:443
     env_file:
       - .env

最后,您将获得三个正在运行的服务。