Docker在错误的数据库中构建架构

时间:2019-03-04 20:00:13

标签: postgresql docker

我正在尝试让docker在数据库my_database下的postgres中构建模式。我正在使用一个SQL文件和docker initdb。问题是docker正在数据库中创建名为postgres的表。我想知道如何才能让docker在其他数据库中创建表。

我已经尝试添加\ c my_database。 如果登录postgres时逐行读取它。 我也考虑过编写脚本,但觉得有一个更简单的解决方案。

任何帮助将不胜感激。

Docker.yml

version: '3'
services:

  webapp:
    build: ./literate-app
    command: nodemon -e vue,js,css start.js
    ports:
      - "3000:3000"
    networks:
        - literate-net

  server:
    build: ./readability-server
    command: nodemon -L --inspect=0.0.0.0:5555 server.js
    networks:
      - literate-net

  redis_db:
    image: redis:alpine
    networks:
      - literate-net

  postgresql:
    image: 'bitnami/postgresql:latest'
    volumes:
      - ./schema.sql:/docker-entrypoint-initdb.d/schema.sql
      - /bitnami
    ports:
      - "5432:5432"
    networks:
      - literate-net
    environment:
      - POSTGRESQL_USERNAME=my_user
      - POSTGRESQL_PASSWORD=password123
      - POSTGRESQL_DATABASE=my_database

networks:
  literate-net:
    driver: bridge

我改变了周围的环境并使用了运行,但是这次它没有建立任何表。

1 个答案:

答案 0 :(得分:0)

使用官方的Postgres Docker镜像

假设您正在使用official Docker Postgres image,则可以使用POSTGRES_DB环境变量来控制数据库的名称:

docker run -d -e POSTGRES_DB=my_database -p 5432:5432 postgres

或者从docker-compose.yml文件中获取

version: '3'
services:
  db:
    image: postgres
    ports:
      - 5432:5432
    environment:
      - POSTGRES_DB=my_database

documentation中所述,您可以对此图像使用更多的环境变量:

  • POSTGRES_PASSWORD
  • POSTGRES_USER
  • POSTGRES_DB
  • POSTGRES_INITDB_ARGS
  • POSTGRES_INITDB_WALDIR
  • PGDATA

使用Bitnami Postgres Docker镜像

使用bitnami/postgresql Docker映像,documentation告诉我们使用POSTGRESQL_DATABASE环境变量:

docker run -d -e POSTGRESQL_DATABASE=my_database -p 5432:5432 bitnami/postgresql

或者从docker-compose.yml文件中获取

version: '3'
services:
  db:
    image: bitnami/postgresql
    ports:
      - 5432:5432
    environment:
      - POSTGRESQL_DATABASE=my_database

检查可用的数据库:

psql --host=localhost --port=5432 --username=postgres --command='\list'
                                  List of databases
    Name     |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-------------+----------+----------+------------+------------+-----------------------
 my_database | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres    | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0   | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
             |          |          |            |            | postgres=CTc/postgres
 template1   | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
             |          |          |            |            | postgres=CTc/postgres
(4 rows)