首页 > 解决方案 > 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

你改变了周围的东西并使用了运行,但是这次它没有构建任何表。

标签: postgresqldocker

解决方案


使用官方 Postgres Docker 镜像

假设你使用的是官方的 Docker Postgres 镜像,你可以通过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

如文档中所述,您可以在此图像中使用更多环境变量:

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

使用 Bitnami Postgres Docker 镜像

使用bitnami/postgresql Docker 镜像,文档告诉我们使用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)

推荐阅读