使用Postgresql Dockerizing Spring Boot应用程序

我正在尝试为使用PostgreSQL作为数据库的Spring Boot应用程序创build一个Docker容器。 我的目标是build立一个运行应用程序以及PostgreSQL的容器。 我创build了一个Dockerfile,如下所示:

FROM ubuntu:15.10 LABEL version="1" ADD app.jar app.jar RUN bash -c 'touch /app.jar' # Install Java, Postgresql ...... USER postgres RUN /etc/init.d/postgresql start &&\ psql --command "CREATE USER test WITH SUPERUSER PASSWORD 'test';" &&\ createdb -O test test USER root RUN echo "local all all trust" >> /etc/postgresql/9.4/main/pg_hba.conf RUN echo "listen_addresses='127.0.0.1'" >> /etc/postgresql/9.4/main/postgresql.conf RUN echo "localhost vspyfe-db" >> /etc/hosts #Define working directory. WORKDIR /data # Add VOLUMEs to allow backup of config, logs and databases VOLUME ["/tmp", "/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"] # Define commonly used JAVA_HOME variable ENV JAVA_HOME /usr/lib/jvm/java-8-oracle COPY ./entrypoint.sh / RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] CMD ["bash", "/usr/lib/postgresql/9.4/bin/postgres", "-D", "/var/lib/postgresql/9.4/main", "-c", "config_file=/etc/postgresql/9.4/main/postgresql.conf"] 

和entrypoint.sh是:

 #!/bin/sh /etc/init.d/postgresql start java -Djava.security.egd=file:/dev/./urandom -jar /app.jar 

我用这个命令docker build --rm=true -t vspyfe/base:v1 . ,当我用这个命令docker run -i -t vspyfe/base:v1图像docker run -i -t vspyfe/base:v1我得到exception说

 Caused by: org.postgresql.util.PSQLException: FATAL: role "test" does not exist at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:471) at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:112) at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66) at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125) at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30) at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22) at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:32) at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24) at org.postgresql.Driver.makeConnection(Driver.java:393) at org.postgresql.Driver.connect(Driver.java:267) 

即使我尝试使用默认的用户名和密码(postgres,postgres)创buildtesting数据库,然后我得到exception说testing数据库不存在。 我不明白我在做什么错。 在Dockerfile中,我指定了我在application.properties文件中使用的每个参数。

你有没有检查你的连接属性? 我有一个与postgres很好地工作的春季启动应用程序的工作示例。 两者都在不同的容器中运行。 请参阅:

Spring Boot + Postgres示例,使用fabric8.io插件

运行示例:

mvn clean package -DskipTests docker:stop docker:build docker:run