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

时间:2018-08-31 12:08:35

标签: 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 session(sessionguid UUID NOT NULL, created text NOT NULL, sessionlife integer NOT NULL);

2 个答案:

答案 0 :(得分:1)

有一组变量控制诸如用户名和自动创建的数据库名之类的事情。这是documentation的相关内容(请参见Environment Variables部分)

  

POSTGRES_DB

     

此可选环境变量可用于定义   映像时创建的默认数据库的其他名称   首先开始。如果未指定,则值   将使用POSTGRES_USER

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

ENV POSTGRES_DB myApp

答案 1 :(得分:0)

如@Roman Konoval所述,您可以使用POSTGRES_DB env变量来创建数据库。

以下是相关文档(请参阅环境变量部分):

  

POSTGRES_DB

     

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

然后创建一个表或执行任何SQL导入(扩展postgres图像:https://docs.docker.com/samples/library/postgres/#how-to-extend-this-image)。

您的dockerfile应该如下所示:

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

start.sh

#!/bin/sh
psql -h localhost -U user -W -d database_name -f /path/to/init.sql

运行容器时,需要按以下方式将sql脚本安装到/path/to/init.sql

$ docker run my_postgress_image -e "POSTGRES_DB=database_name" -v ./init.sql:/path/to/init.sql