Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 部署在Docker上的Tomcat应用程序:可以连接到Postgres,但新数据不会显示在数据库中_Java_Postgresql_Docker_Jpa_Tomcat - Fatal编程技术网

Java 部署在Docker上的Tomcat应用程序:可以连接到Postgres,但新数据不会显示在数据库中

Java 部署在Docker上的Tomcat应用程序:可以连接到Postgres,但新数据不会显示在数据库中,java,postgresql,docker,jpa,tomcat,Java,Postgresql,Docker,Jpa,Tomcat,我已使用Windows将Tomcat应用程序部署到Docker,在我的终端上显示它已连接到数据库: PostgreSQL init process complete; ready for start up. app-db_1 | app-db_1 | LOG: database system was shut down at 2021-04-25 19:15:05 UTC app-db_1 | LOG: MultiXact member wraparound protection

我已使用Windows将Tomcat应用程序部署到Docker,在我的终端上显示它已连接到数据库:

PostgreSQL init process complete; ready for start up.
app-db_1   |
app-db_1   | LOG:  database system was shut down at 2021-04-25 19:15:05 UTC
app-db_1   | LOG:  MultiXact member wraparound protections are now enabled
app-db_1   | LOG:  autovacuum launcher started
app-db_1   | LOG:  database system is ready to accept connections
该应用程序使用JPA和Hibernate。我的主机上已经有一个数据库,当我们不在Docker时,我们可以很好地进行交互。我对一个实体调用persist,没有抛出异常。除此之外,行为也是意料之中的。但当我从用户运行SELECT*时;在pgAdmin中,新实体不会出现在数据库中

这是docker compose:

app-web:
  build: .
  ports:
    - "8080:8080"
  links:
    - app-db


app-db:
  build: ./db
  expose:
    - "5432"

app-db-data:
  image: cogniteev/echo
  command: echo 'Data Container for PostgreSQL'
  volumes:
    - /var/lib/postgresql/data
我还尝试过在没有app db数据的情况下使用卷postgres_data:/var/lib/postgresql/data/,但得到了相同的结果

这是web应用程序的Dockerfile:

FROM tomcat:10.0.5-jdk8-openjdk
MAINTAINER test

EXPOSE 8080

RUN rm -rf /usr/local/tomcat/webapps/*

COPY ./target/timetraveling-microservice-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war

CMD ["catalina.sh","run"]
在persistence.xml中,我有:

...
<property name="hibernate.connection.url" value="jdbc:postgresql://app-db:5432/my-database" />
...
<property name="hibernate.hbm2ddl.auto" value="update" />
...
我在网上找不到很多帮助我的资源,因为他们使用Spring,我不允许使用Spring。我对Docker显然是个新手:那么为什么持久化在不抛出异常的情况下工作得很好,但实际数据却没有显示在我为我的web应用程序创建的数据库中呢

编辑:

当我运行docker ps时:

CONTAINER ID   IMAGE                                COMMAND                  CREATED          STATUS          PORTS                    NAMES
4a67709429b6   timetraveling-microservice_app-web   "catalina.sh run"        32 minutes ago   Up 32 minutes   0.0.0.0:8080->8080/tcp   timetraveling-microservice_app-web_1
74f1c1d1cc40   timetraveling-microservice_app-db    "docker-entrypoint.s…"   32 minutes ago   Up 32 minutes   5432/tcp                 timetraveling-microservice_app-db_1

pg admin无权访问容器运行和通信所在的docker专用网络。如果您希望能够访问应用程序数据库,则应在您的docker compose中使用端口:-5432:5432,以便在最新版本的docker中公开不发布端口,并用于提供有关图像的信息

app-db:
  build: ./db
  ports:
    - 5432:5432

供参考

您好!谢谢你这么快就来了!有额外的步骤吗?我有同样的结果:
app-db:
  build: ./db
  ports:
    - 5432:5432