当前位置: 首页 > 知识库问答 >
问题:

容器化Spring Boot应用程序时出现Docker错误

羊新翰
2023-03-14

我在我的项目中创建了以下Dockerfile来容器化Spring app

FROM java:8

EXPOSE 8080

VOLUME /tmp

ADD ./spring-boot-app.jar /app/app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]

无论我是否尝试在ADD./spring-boot-app.jar/app/app.jar中提供jar文件的完整项目路径,仍然会导致以下错误-

FROM openjdk:8-jre-alpine
ADD build/libs/*.jar app.jar
ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar

但是当运行命令docker-compose up时,它没有将spring boot app容器与mysql容器链接起来,并给出通信链接失败错误。这可能是因为Dockerfile入口点。下面是docker-compose.yml:

version: '3'

services:
  demo-mysql:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: smthing
      MYSQL_DATABASE: smthing
      MYSQL_USER: smthing
      MYSQL_PASSWORD: smthing
  spring-boot-docker-webapp:
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - demo-mysql
    ports:
      - 8080:8080
    environment:
      DATABASE_HOST: demo-mysql
      DATABASE_USER: smthing
      DATABASE_PASSWORD: smthing
      DATABASE_NAME: smthing
      DATABASE_PORT: 3306

共有1个答案

贡建修
2023-03-14

好吧,看起来你现在有点改变了,这又成了另一个问题。如果您想从Spring Boot应用程序与mysql通信,您需要将它们放在网络上。您可以在docker compose文件中的任何地方声明网络(我喜欢在底部声明),但是对于每个服务,您需要将您的服务添加到该网络中。然后,您需要为Spring Boot服务设置一个环境变量,=mysql容器的容器名。在您的例子中,Mysql-demo。您需要更新Spring boot项目中的application.properties以接受该变量,例如。

MYSQL_HOST=localhost spring.datasource.url=jdbc:mysql://${MYSQL_HOST}/your-db-name

这样,您的应用程序将默认为localhost,除非您将环境变量传入,这将从您的docker compose文件中执行,这将告诉您的应用程序指向您放置在与您的应用程序相同的网络上的mysql容器。

 类似资料:
  • docker错误: PS C:\Windows\System32>docker运行测试错误:出现JNI错误,请检查线程“main”java.lang.noClassDeffounderRorr:javax/JMSException在java.lang.Class.GetDeclaredMethods0(本机方法)在java.lang.Class.GetDeclaredMethods(class.j

  • 我有一个ejb文件,其中包含一些文件和一个消息驱动bean。 对如何解决这个问题有什么想法吗? 此处的Glassfish服务器错误http://pastebin.com/hkyrfnwe

  • Eclipse在容器中工作得很好,它的窗口在主机上是可见的(X11通过socket共享)。 该应用程序是一个使用JavaFX(Efxclipse和M2Eclipse)的Eclipse RCP项目。我删除了下面RCP的所有引用,以减少示例中的复杂性,并且因为它也发生在真正简单的JavaFX应用程序(非OSGI)中--所以OSGI不是发行方。 在Eclipse(在Docker容器内)中运行JavaFX

  • 当我连续发布数据时,我会在C#应用程序上得到发布超时错误,一旦我重新启动应用程序,它会工作几个小时。[注意:由于php需要时间完成任务,所以新的请求都在等待中,它创建队列,等待时间超过2分钟,im出现超时错误]。 我们的两台服务器都使用了最大50%的CPU和RAM使用量 我检查了两个C#代码和PHP代码都工作良好,没有任何问题或bug 提前致谢哥们儿:)

  • 我试图在Heroku上推动我的Spring Boot应用程序,我得到了一个错误:未能用Maven构建应用程序,即未能执行目标org.apache.Maven.plugins:maven-compiler-plugin:3.8.1:compile(default-compile)on project BlogApplication:致命错误编译:无效的目标版本:11。 日志: pom.xml