并行Docker上下文是可能的吗?

我们如何能够使用不是当前目录的子项目的项目和path来获取docker服务和构build容器?

例:

/ application-a <- needs api01 & api03 (not api02) - .git - docker-compose.yml / src / application-a <- needs api01 & api02 (not api03) - .git - docker-compose.yml / src / api01 - .git - Dockerfile / src / api02 - .git - Dockerfile / src / api03 - .git - Dockerfile / src 

我尝试的每个path都会导致错误。 大部分的错误都在抱怨上下文。

我们的公司正在使用Express将大约50个从Web服务从.NET移植到微服务。 但是,并不是所有的前端和应用程序都需要访问所有的后端服务。 我们也想限制只有那些需要访问的项目和回购。

目标是让用户检出他们需要的api服务,然后检查他们正在处理的一个主要应用程序。 源文件夹将最终在开发人员的笔记本电脑上相互平行。

我很想在相关应用程序docker-compose.yml中执行此操作…

 version: '2' services: api01: build: context: .. container_name: api01 command: bash -c "npm install && nodemon" volumes: - app01/src:/var/www working_dir: /var/www ports: - "3000" networks: - backend api02: build: context: .. container_name: api02 command: bash -c "npm install && nodemon" volumes: - app02/src:/var/www working_dir: /var/www ports: - "3000" networks: - backend networks: backend: driver: bridge 

提前致谢。

看起来像添加目录名称的context:volumes:path将解决这个问题:

 version: '2' services: api01: build: context: ../app01 container_name: api01 command: bash -c "npm install && nodemon" volumes: - ../app01/src:/var/www working_dir: /var/www ports: - "3000" networks: - backend 

我会build议一个稍微不同的方法。 我使用一个metarepository – 基本上是一个包含其他仓库的外部仓库。

这里有几个实现: https : //github.com/mateodelnorte/meta http://gitslave.sourceforge.net/

您可以拥有多个包含子回购的不同子集的元库。 如果它们重叠也没问题。 里面的元回购将是一个完美的地方,把你的docker撰写文件。

你的开发者的工作stream程如下:

 meta git clone git@github.com:yourOrg/project-name.git cd project-name docker-compose up 

你的docker-compose.yml文件应该是这样的:

 version: "2" networks: service: site: services: rabbitmq: image: rabbitmq hostname: rabbitmq networks: - service redis: image: redis networks: - service mongo: image: mongo networks: - site site: build: ./nycnode-site ports: - "3000:3000" volumes: - ./nycnode-site:/home/app/site - /home/app/site/node_modules environment: - MONGO_URI=mongodb://mongo:27017/nycnode - NODE_ENV=development networks: - site meetup-ingestor: build: ./nycnode-meetup-ingestor volumes: - ./nycnode-meetup-ingestor:/home/app/meetup-ingestor - /home/app/meetup-ingestor/node_modules environment: - RABBITMQ_URL=amqp://rabbitmq:5672 - REDIS.HOST=redis - NODE_ENV=development networks: - service user-ingestor: build: ./nycnode-user-ingestor volumes: - ./nycnode-user-ingestor:/home/app/user-ingestor - /home/app/user-ingestor/node_modules environment: - RABBITMQ_URL=amqp://rabbitmq:5672 - REDIS.HOST=redis - NODE_ENV=development networks: - service youtube-ingestor: build: ./nycnode-youtube-ingestor volumes: - ./nycnode-youtube-ingestor:/home/app/youtube-ingestor - /home/app/youtube-ingestor/node_modules environment: - RABBITMQ_URL=amqp://rabbitmq:5672 - REDIS.HOST=redis - NODE_ENV=development networks: - service denormalizer: build: ./nycnode-denormalizer volumes: - ./nycnode-denormalizer:/home/app/denormalizer - /home/app/denormalizer/node_modules ports: - "3001:3001" environment: - RABBITMQ_URL=amqp://rabbitmq:5672 - REDIS.HOST=redis - MONGO_URL=mongodb://mongo:27017/nycnode - NODE_ENV=development networks: - service - site 

另外,没有任何东西阻止你拥有多个docker-compose.yml文件。

你可以用-f标志指定你想使用哪一个

 docker-compose -f docker-compose-subset-A.yml up