使用多个postgres数据库为开发和生产创建docker容器

时间:2020-05-25 09:31:00

标签: postgresql docker docker-compose

我正在尝试使用class C class B extends C class A extends B { public A() { PageFactory.initElements(driver, this); //initializes elements in classes A, B and C } } 创建2个docker容器,一个用于dev,一个用于prod。这两个容器应链接到单独的postgres数据库。 我尝试了以下方法,但似乎每次都只创建一个容器和一个数据库。

docker-compose.yml

docker-compose

docker-compose.dev.yml

version: "3"
services:
  db:
    image: postgres:latest
    restart: always
    container_name: myinstance-postgres-database
    environment:
      - POSTGRES_USER= dbuser
      - POSTGRES_PASSWORD= dbpass
      - POSTGRES_DB= ProductionDB
   ports:
   - 127.17.0.1:5432:5432
   volumes:
   - myinstance-postgres-db:/var/lib/postgresql/data
  app:
    image: service/platform:latest
    restart: always
    container_name: prod-app
    environment:
      DB_SETUP: "true"
      DB_VENDOR: "postgresql"
      DB_HOST: db
      DB_USER: "dbuser"
      DB_PASSWORD: "dbpass"
      DB_NAME: "ProductionDB"
      DB_WAIT: 10
    ports:
    - 8443:8443
    volumes:
    - myinstance-postgres-git:/usr/local/tomcat/webapps/ROOT/WEB-INF/git
    depends_on:
    - db

volumes:
  myinstance-postgres-db:
  myinstance-postgres-git:

然后我跑步:

version: "3"
services:
  db:
    image: postgres:latest
    restart: always
    container_name: myinstancedev-postgres-database
    environment:
      - POSTGRES_USER= dbuser
      - POSTGRES_PASSWORD= dbpass
      - POSTGRES_DB= DevDB
   ports:
   - 127.17.0.1:5432:5432
   volumes:
   - myinstancedev-postgres-db:/var/lib/postgresql/data
  app:
    image: service/platform:latest
    restart: always
    container_name: dev-app
    environment:
      DB_SETUP: "true"
      DB_VENDOR: "postgresql"
      DB_HOST: db
      DB_USER: "dbuser"
      DB_PASSWORD: "dbpass"
      DB_NAME: "DevDB"
      DB_WAIT: 10
    ports:
    - 8444:8443
    volumes:
    - myinstancedev-postgres-git:/usr/local/tomcat/webapps/ROOT/WEB-INF/git
    depends_on:
    - db

volumes:
  myinstancedev-postgres-db:
  myinstancedev-postgres-git:

因此,我有一个容器是dev-app,仅创建了一个数据库。 有解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果您想同时运行它们,请使用

sudo docker-compose -f docker-compose.yml -p prod up -d && sudo docker-compose -f docker-compose.dev.yml -p dev up -d

当您在同一docker-compose命令中传递多个文件时,它不会创建您想要的单独容器。而是合并它们。选中Share Compose configurations between files and projects

还要注意,您的主机中可能存在PORT个冲突错误。因为在两个撰写文件中,您都暴露了相同的端口54328443

我的输出在不同端口上有2张高山postgres图像。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                    NAMES
74a8e5a8fad0        postgres:alpine     "docker-entrypoint.s…"   1 second ago        Up Less than a second   0.0.0.0:5430->5432/tcp   prod_web_1
23f2b995d499        postgres:alpine     "docker-entrypoint.s…"   2 seconds ago       Up 2 seconds            0.0.0.0:5431->5432/tcp   dev_web_1

也请考虑使用env files for compose