【问题标题】:Docker with springboot and mysql issue with linking and running带有springboot和mysql的Docker与链接和运行问题
【发布时间】:2019-02-23 06:19:41
【问题描述】:

我正在尝试将 spring-boot 应用程序(连接到 mySQL 数据库)作为 docker 容器(因此基本上是 2 个链接在一起的容器)运行。

但由于 mySQL docker 容器不同,我很难将这两个容器连接起来。我尝试将 application.properties 外部化,但无法通过将参数传递给外部应用程序属性来运行它。

有没有办法有效地连接这两个容器?

这是我的应用程序属性和 dockerfile

application.properties:

spring.application.name=customer-service
server.port:8203

#spring.datasource.url=jdbc:mysql://demo-mysql:3306/bankbotdb?autoReconnect=true&useSSL=false
spring.datasource.url=jdbc:mysql://localhost:3306/bankbotdb?autoReconnect=true&useSSL=false
spring.datasource.username=***
spring.datasource.password =*******
...

Dockerfile:

FROM openjdk:8
ADD target/nlp-bot-customer-service-0.0.1-SNAPSHOT.jar /opt/micro-services/
ADD config/application.properties /opt/micro-services/config/
WORKDIR /opt/micro-services/
EXPOSE 8203
ENTRYPOINT [“java”, “-jar”,”nlp-bot-customer-service-0.0.1-SNAPSHOT.jar — spring.config.name=application — spring.config.location=classpath:/op/micro-services/config”]

【问题讨论】:

  • 能否请您说明如何启动此容器?我认为这种情况可能是您的容器与主机的 3306 端口没有连接。
  • 是的,没错。因此,我需要一种方法来找到这种联系。这是我的运行方式(见下文)
  • docker run -it \ --name bot-customer-service \ -p 8203:8203 \ --link demo-mysql \ bot-customer-service
  • --link 选项被标记为不推荐。你应该试试creating your own network
  • 另外,您可以在运行时尝试使用--network host 将您的两个容器连接到主机网络。这将使您的容器使用主机的网络,因此,您在其中使用的端口将可以在您的网络中访问。这在生产环境中不是最好的主意,因为您应该阻止从应用程序外部访问您的数据库,但它可以让您检查这是否与您的应用程序配置无关。

标签: mysql docker spring-boot


【解决方案1】:

您的问题出在您的 application.properties:spring.datasource.url=jdbc:mysql://localhost:3306/bankbotdb?autoReconnect=true&useSSL=false

在 docker 环境中,您使用“localhost”将引用容器本身(在本例中为“bot-customer-service”容器),除非您使用不推荐的主机模式。

要解决此问题,您应该将行更改为spring.datasource.url=jdbc:mysql://demo-mysql:3306/bankbotdb?autoReconnect=true&useSSL=false(根据您的评论)。启动时将 demo-mysql 更改为您调用的 mysql 容器。

我建议在编排服务时使用docker-compose 来帮助获得概览和可重复性。

【讨论】:

  • 感谢 Mikael,但有一个问题!当我更改 spring.datasource.url 时,我无法编译我的 spring-boot 应用程序(以创建 Dockerfile 中引用的 jar)。那么在构建我的 docker 镜像时有什么方法可以做到吗?
猜你喜欢
  • 2016-11-23
  • 2022-01-22
  • 2020-04-18
  • 1970-01-01
  • 2021-03-02
  • 2021-07-17
  • 2019-05-24
  • 2022-01-06
  • 1970-01-01
相关资源
最近更新 更多