首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用postgres配置dockerfile

用postgres配置dockerfile
EN

Stack Overflow用户
提问于 2016-05-02 05:08:53
回答 2查看 34.8K关注 0票数 9

试图使postgres的Dockerfile需要我的应用程序。

Dockerfile

代码语言:javascript
运行
复制
FROM postgres:9.4
RUN mkdir /sql
COPY src/main/resources/sql_scripts/* /sql/
RUN psql -f /sql/create_user.sql
RUN psql -U user -W 123 -f create_db.sql
RUN psql -U user -W 123 -d school_ats -f create_tables.sql

代码语言:javascript
运行
复制
docker build .

结果:

代码语言:javascript
运行
复制
Sending build context to Docker daemon 3.367 MB
Step 1 : FROM postgres:9.4
 ---> 6196bca94565
Step 2 : RUN mkdir /sql
 ---> Using cache
 ---> 6f57c1e759b7
Step 3 : COPY src/main/resources/sql_scripts/* /sql/
 ---> Using cache
 ---> 3b496bfb28cd
Step 4 : RUN psql -a -f /sql/create_user.sql
 ---> Running in 33b2230a12fa
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
The command '/bin/sh -c psql -a -f /sql/create_user.sql' returned a non-zero code: 2

如何为我的项目指定db in docker?

EN

回答 2

Stack Overflow用户

发布于 2016-05-02 08:05:37

当构建您的停靠映像时,postgres没有运行。在容器启动时启动数据库,之后可以执行任何sql文件。最简单的解决方案是将sql文件放到特殊目录中:

代码语言:javascript
运行
复制
FROM postgres:9.4
COPY *.sql /docker-entrypoint-initdb.d/

启动时,脚本将执行这个dir中的所有文件。您可以在docs /postgres/部分中了解到如何扩展此映像。

另外,如果您需要不同的用户,您应该设置环境变量POSTGRES_USERPOSTGRES_PASSWORD。那么使用自定义脚本创建用户就更容易了。

票数 12
EN

Stack Overflow用户

发布于 2016-05-02 08:06:56

正如上面的注释所述,在图像构建过程中,您不会得到Postgres的运行实例。

你可以采取稍微不同的方法。您可以将它们复制到/docker-entrypoint-initdb.d/目录中,而不是自己执行SQL脚本。它们将在容器启动时执行。

看看postgres:9.4图像是如何构建的:

还可以在Dockerfile中使用变量设置数据库详细信息:

  • POSTGRES_DB
  • POSTGRES_USER
  • POSTGRES_PASSWORD
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36975330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档