用postgresconfigurationdockerfile
试图让Dockerfile的postgres数据库需要我的应用程序。
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
我怎样才能在我的项目在泊坞窗指定数据库?
在构builddocker镜像时,postgres没有运行。 数据库启动时,容器启动,任何SQL文件可以在那之后执行。 最简单的解决scheme是把你的SQL文件放到特殊的目录中:
FROM postgres:9.4 COPY *.sql /docker-entrypoint-initdb.d/
启动启动脚本时将执行该目录中的所有文件。 您可以在文档https://hub.docker.com/_/postgres/中的“ 如何扩展此图像”部分阅读此内容 。
另外,如果你需要不同的用户,你应该设置环境variablesPOSTGRES_USER
和POSTGRES_PASSWORD
。 使用自定义脚本创build用户比较容易。
正如上面的评论所说,在图像构build期间,您不会得到Postgres的运行实例。
你可以采取稍微不同的方法。 你可以将它们复制到/docker-entrypoint-initdb.d/
目录,而不是尝试自己执行SQL脚本。 当容器启动时它们将被执行。
看看postgres吧:9.4镜像构build:
- Dockerfile
- docker-entrypoint.sh
同样在你的Dockerfile中使用variables来设置数据库的细节:
- POSTGRES_DB
- POSTGRES_USER
- POSTGRES_PASSWORD