我正在尝试让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
我改变了周围的环境并使用了运行,但是这次它没有建立任何表。
答案 0 :(得分:0)
假设您正在使用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/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)