使用postgres配置dockerfile



试图为我的应用程序的postgres数据库创建Dockerfile。

Dockerfile

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

运行

docker build .

结果:

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

如何在docker中为我的项目指定数据库?

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

FROM postgres:9.4
COPY *.sql /docker-entrypoint-initdb.d/

启动时,启动脚本将执行该目录中的所有文件https://hub.docker.com/_/postgres/在如何扩展此图像部分中。

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

正如上面的评论所说,在图像构建过程中,您没有得到Postgres的运行实例。

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

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

  • Dockerfile
  • 码头入口点.sh

此外,在Dockerfile中使用变量设置数据库详细信息:

  • POSTGRES_DB
  • POSTGRES_USER
  • POSTGRES_PASSWORD

最新更新