如何从另一个dockercompose文件运行dockercompose文件?

时间:2019-11-26 00:26:59

标签: docker docker-compose

我已经在docker文档中找到了该问题的答案,但我认为它并没有被简单地放置在任何地方。我想使用docker-compose.yml在docker中启动我的应用,我希望docker-compose.yml可以启动另一个项目中另一个docker-compose.yml文件中定义的其他容器。

version: '3.4'

#we need network if we want the services to talk to each other
networks:
  services:
    driver: bridge

services:

  jc:
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
      - PORT=8080
      network: host
    networks:
    - services
    image: jc
    container_name: jc
    ports:
    - 8080:8080

如何编辑此文件,以便在运行此docker-compose.yml文件时可以在不同的文件路径中运行另一个docker-compose.yml文件?

2 个答案:

答案 0 :(得分:0)

这是一种黑客,但是您可以添加另一个容器,以启动docker compose和另一个docker-compose文件。 例如:

入门容器的Docker文件:

FROM ubuntu:bionic
RUN mkdir -p /compose
WORKDIR /compose
CMD ["docker-compose", "up", "-d"]

主要docker compose文件(启动Redis服务器和启动器容器)。请注意,撰写二进制文件,docker套接字和另一个docker-compose.yml文件已安装到启动程序容器中:

version: '2.1'

services:

  from-main-compose:
    image: redis:3

  starter:
    image: starter:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /usr/local/bin/docker-compose:/usr/local/bin/docker-compose:ro
      - /home/shay/source/composeFromContainer/another-compose/docker-compose.yml:/compose/docker-compose.yml:ro

第二个docker撰写文件:

version: '2.1'

services:
  redis-from-container:
    image: redis:3

结果是这样的:

b1faa975df49        redis:3             "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        6379/tcp            compose_redis-from-container_1
7edca79d3d99        redis:3             "docker-entrypoint.s…"   5 minutes ago       Up 5 minutes        6379/tcp            composefromcontainer_from-main-compose_1

请注意,如果直接使用此hack,则服务将放置在不同的网络上,因此可能需要进行一些调整。

答案 1 :(得分:0)

尝试使用docker-compose文件的extends选项并使用了不同的用法后,我始终收到一条错误消息,指示即使更新到最新的docker版本也不支持扩展。但是,我确实通过运行此命令解决了问题。

docker-compose -f /path/to/other/docker-compose-file/docker-compose.yml up

我确定必须在docker-compose文件中添加一些内容,因此我在文档中忽略了这一点。但是您可以在此处了解更多信息。 docker-compose docs

相关问题