【问题标题】:Spring Boot App + H2 (in Memory) not working with Docker ContainerSpring Boot App + H2(在内存中)不适用于 Docker 容器
【发布时间】:2021-05-14 08:08:03
【问题描述】:

我有一个关于使用 Docker 部署 Spring Boot 应用 + H2 的问题。

我已经构建了一个简单的 Spring Boot 项目,它连接到内存数据库中的 H2,我想将应用程序部署在 Docker 容器中。 我的问题是,我的容器运行良好,但我无法通过定义的本地主机和端口访问我的 API。当我在浏览器中打开时,我收到没有连接的消息。

当我在本地启动 jar 时,一切正常,但在我的容器中没有。我怀疑我的 Dockerfile 有问题。

谁能帮帮我。

以下是我到目前为止所做的一些细节:

我的应用道具:

server.port=8580
logging.level.org.springframework.web=DEBUG
#spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.url=${DATABASE_SERVER:jdbc:h2:file:/Users/test/Documents/MyProjects/h2-Db/todoAppDb}
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.h2.console.settings.trace=false
spring.h2.console.settings.web-allow-others=false

我的 Dockerfile:

enter code here
FROM amazoncorretto:11.0.8-alpine
VOLUME /app
ADD /target/TodoApp.jar TodoApp.jar
EXPOSE 8580
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/TodoApp.jar"]

我的 CMD 构建 Docker 镜像:

docker build -t todoapi .   

我的 CMD 运行容器:

docker run -e DATABASE_SERVER=jdbc:h2:mem:tmpdb -dp 8580:8080 todoapi

之后我的容器运行,这是容器控制台的输出:

container console

当打开链接 localhost:8580 时,我的浏览器告诉我无法建立连接。

我做错了什么?

【问题讨论】:

    标签: java spring-boot docker h2


    【解决方案1】:

    -p 8080:80 将容器中的TCP 80端口映射到Docker主机上的8080端口。

    你是publishing 错误的端口。

    你应该运行:

    docker run -e DATABASE_SERVER=jdbc:h2:mem:tmpdb -dp 8080:8580 todoapi

    然后在宿主机中访问如下

    http://localhost:8080
    

    【讨论】:

    • 是的,你完全正确,我是个白痴。我切换了端口映射或理解错误。非常感谢,我快疯了,哈哈哈。
    • np,很高兴为您提供帮助
    猜你喜欢
    • 2021-06-05
    • 2021-11-12
    • 2023-02-08
    • 2020-03-19
    • 2019-07-27
    • 2023-01-29
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多