【发布时间】: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