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
你改变了周围的东西并使用了运行,但是这次它没有构建任何表。
解决方案
使用官方 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)
推荐阅读
- database - 安装 sqlite3 和制作 .sqlite 文件有什么区别?
- ms-access - Access 中的查找函数,用于根据文本字符串插入结果
- kubernetes - 跨不同 Kubernetes 集群创建 Zookeeper 集群
- r - R:查找重叠的几何图形:连接路线和道路
- react-native - useFrame 不起作用,applyMatrix4 没有动画原语?
- python - 来自更大 hdf5 中的组的新 hdf5
- python - 如何根据同一日期创建列
- powerbi - Power BI 关系限制视觉对象的显示
- java - springboot jar 上的 Java jdeps 命令为 Tomcat 依赖项引发错误
- linux - 如何在 linux 中获取主机并从文件中传递