多个Docker Compose项目中的Docker共享容器

时间:2018-11-16 11:16:40

标签: docker docker-compose dockerfile

我有一个docker-compose.yml,它可以启动2个服务(我从中遗漏了所有不相关的数据)。

  app:
    build:
      context: .
      dockerfile: ./docker/app/Dockerfile
    image: ...
    container_name: app-${ENV}
    depends_on:
      - db
    expose:
      - 80

  db:
    image: ...
    container_name: my-cool-db
    ports:
      - "3306:3306"

在这里看到的要点是app正在根据参数获取容器名称。所以基本上我有一个运行以下命令的shell脚本:

ENV=$1 docker-compose -p $1 up -d

简而言之,无论我转发什么参数,都应该启动新的应用程序容器。例如,如果我做sh initializer.sh first,我将得到app-first容器。指定了-p参数,这样我就可以将同一容器的多个实例归类为不同的项目。

如果我只有一个容器,效果很好,最后我会说:

app-first
app-second
app-third

我想要实现的是让所有容器使用相同的数据库。但是当我执行docker-compose时,我的数据库容器仍然希望独立于他的存在而被启动。

试图用不同的项目名称创建一个具有相同容器名称的数据库是否会导致冲突?

可以在不启动2个单独的数据库容器的情况下进行此操作吗?

1 个答案:

答案 0 :(得分:1)

hacky解决方案:

将撰写文件更改为

var colorsDataEl = $('.colors-data');
var colorsData = colorsDataEl.sassToJs({pseudoEl:":before", cssProperty: "content"});
colorsDataEl.html(JSON.stringify(colorsData));

然后首先创建网络services: app: image: ... container_name: app-${ENV} networks: - shared expose: - 80 db: image: ... container_name: my-cool-db networks: - shared ports: - "3306:3306" networks: shared: external: true

调出数据库:docker network create shared

第一个应用程序:docker-compose up -d db

第二个应用:ENV=first docker-compose -p first up -d app

相关问题