用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_USERPOSTGRES_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