将Docker合成文件导入另一个合成文件

np8igboo  于 2023-01-20  发布在  Docker
关注(0)|答案(1)|浏览(139)

是否可以"导入"或链接一个停靠合成文件到另一个停靠合成文件?
假设我有两个文件:

# 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参数链接这两个文件?

gg0vcinb

gg0vcinb1#

通过延长

可以扩展或使用多个Docker-compose文件及其服务,并将它们链接到一个文件中。您可以查看this link以了解多个compose文件的其他用法。但如果不像您提到的那样将相关文件链接在一起,则无法包含该文件。
在这里,我定义了一个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

最后,您将拥有三个正在运行的服务。

相关问题