首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker上部署的Tomcat应用程序:可以连接到Postgres,但新数据不会显示在数据库中

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

Stack Overflow用户
提问于 2021-04-26 04:09:34
回答 1查看 61关注 0票数 0

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

代码语言:javascript
复制
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

该应用程序使用带有Hibernate的JPA。我已经在我的主机上有一个数据库,当我们不在Docker上时,我们可以很好地交互。我在实体上调用persist,没有抛出异常。否则,行为就是预期的。但是,当我在pgAdmin中运行SELECT * FROM users;时,新实体不会出现在数据库中。

这里是docker-compose:

代码语言:javascript
复制
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/的情况下使用as卷数据,但我得到了相同的结果。

这是web应用程序的Dockerfile:

代码语言:javascript
复制
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中,我有:

代码语言:javascript
复制
...
<property name="hibernate.connection.url" value="jdbc:postgresql://app-db:5432/my-database" />
...
<property name="hibernate.hbm2ddl.auto" value="update" />
...

数据库的Dockerfile是

代码语言:javascript
复制
FROM postgres:latest
MAINTAINER test

ENV POSTGRES_USER user
ENV POSTGRES_PASSWORD password
ENV POSTGRES_DB my-database

我没有在网上找到很多帮助我的资源,因为他们使用Spring,而我不被允许使用Spring。我显然是Docker的新手:(那么为什么持久化工作得很好,没有抛出异常,但是实际的数据没有显示在我友好地为我的web应用程序创建的数据库中?

编辑:

当我运行docker ps时:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2021-04-26 04:33:21

pg-admin不能访问容器在其中运行和通信的docker私有网络。如果你想访问app-db,你应该在你的docker-compose中使用ports: -5432:5432 (expose不会在最新版本的docker中发布端口,而是用于提供关于镜像的信息)。

代码语言:javascript
复制
app-db:
  build: ./db
  ports:
    - 5432:5432

参考https://docs.docker.com/compose/networking/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67257802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档