试图为我的应用程序的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_USER
和POSTGRES_PASSWORD
。使用自定义脚本创建用户会更容易。
正如上面的评论所说,在图像构建过程中,您没有得到Postgres的运行实例。
你可以采取稍微不同的方法。您可以将SQL脚本复制到/docker-entrypoint-initdb.d/
目录中,而不是自己尝试执行SQL脚本。它们将在容器启动时执行。
看看postgres:9.4图像是如何构建的:
- Dockerfile
- 码头入口点.sh
此外,在Dockerfile中使用变量设置数据库详细信息:
- POSTGRES_DB
- POSTGRES_USER
- POSTGRES_PASSWORD