Postgresql 创建数据库,然后使用dockerfile创建表

Postgresql 创建数据库,然后使用dockerfile创建表,postgresql,docker,Postgresql,Docker,我正在使用Postgres,希望创建一个数据库,然后在创建容器后创建一个表。现在我正在使用dockerfile和init.sql文件。创建数据库,但在默认postgres数据库中创建表。如何使新数据库成为默认数据库,或者至少在正确的数据库中创建表?多谢各位 Dockerfile FROM library/postgres COPY init.sql /docker-entrypoint-initdb.d/ init.sql CREATE DATABASE myApp; CREATE TABLE

我正在使用Postgres,希望创建一个数据库,然后在创建容器后创建一个表。现在我正在使用dockerfile和init.sql文件。创建数据库,但在默认postgres数据库中创建表。如何使新数据库成为默认数据库,或者至少在正确的数据库中创建表?多谢各位

Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/

init.sql
CREATE DATABASE myApp;
CREATE TABLE session(sessionguid UUID NOT NULL, created text NOT NULL, sessionlife integer NOT NULL);

有一组变量可以控制诸如用户名和自动创建的数据库的名称之类的内容。以下是see环境变量部分的相关部分:

博士后

此可选环境变量可用于定义 创建映像时创建的默认数据库的不同名称 这是第一个开始。如果未指定,则 将使用POSTGRES_用户

只需在run命令或Dockerfile中将其指定为环境变量:


正如@Roman Konova所提到的,您可以使用POSTGRES_DB env变量来创建数据库

以下是相关文档,请参见环境变量部分:

博士后

此可选环境变量可用于为首次启动映像时创建的默认数据库定义不同的名称。如果未指定,则将使用POSTGRES_USER的值

然后,要创建表或执行任何sql导入,请扩展postgres映像:

您的dockerfile应该如下所示:

FROM library/postgres
COPY start.sh /docker-entrypoint-initdb.d/start.sh
start.sh:

运行容器时,需要将sql脚本装载到/path/to/init.sql,如下所示:

$ docker run my_postgress_image -e "POSTGRES_DB=database_name" -v ./init.sql:/path/to/init.sql
#!/bin/sh
psql -h localhost -U user -W -d database_name -f /path/to/init.sql
$ docker run my_postgress_image -e "POSTGRES_DB=database_name" -v ./init.sql:/path/to/init.sql