如何在Spring Boot Docker容器中访问MySQL Docker容器 [英] how to access mysql docker container in spring boot docker container

查看:111
本文介绍了如何在Spring Boot Docker容器中访问MySQL Docker容器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个docker文件

1.mysql-dockerfile

 来自mysql:5.5展览3306ENV MYSQL_ROOT_PASSWORD根ENV MYSQL_DATABASE待办事项清单 

用于构建dockerfile的命令如下

  sudo docker build -t mysql-img -f mysql-dockerfile.sudo docker运行-d --name mysqlcontainer -p 3030:3306 mysql-img 

2.java-dockerfile

  FROM openjdk:8-jre-alpine9090号展览WORKDIR/usr/srcCOPY target/*.war todoApp.warCMD ["java",-jar","todoApp.war"] 

用于构建dockerfile的命令如下

  sudo docker build -t java-img -f java-dockerfile.docker运行--name javacontainer -d -p 4040:9090 java-img 

spring boot应用程序包含jdbc网址,如下所示

spring.datasource.url = jdbc:mysql://localhost:3030/ToDoList

我无法启动项目,因为docker中的spring boot应用程序无法连接另一个容器中的mysql db.

我发现的一个解决方案是将两个docker容器带入一个docker网络或链接docker容器.任何人都可以提出好的解决方案,修改的docker run命令和修改的jdbc url.

解决方案

将它们放入一个网络并使用容器名称作为主机名:

  docker network create foodocker运行--network = foo --name mysqlcontainer -d mysql-imgdocker run --network = foo --name javacontainer -d java-img 

不公开端口-它们在网络内部容器之间自动公开.

要进行内部连接,请使用 mysqlcontainer:3306 javacontainer:9090 .

要从主机连接,您需要端口暴露.

i have 2 docker file

1. mysql-dockerfile

 FROM mysql:5.5

 EXPOSE 3306

 ENV MYSQL_ROOT_PASSWORD root

 ENV MYSQL_DATABASE ToDoList

command used to build dockerfiles are as below

sudo docker build -t mysql-img  -f mysql-dockerfile .

sudo docker run -d --name mysqlcontainer -p 3030:3306 mysql-img

2. java-dockerfile

FROM openjdk:8-jre-alpine

EXPOSE 9090

WORKDIR /usr/src

COPY target/*.war todoApp.war 

CMD ["java","-jar","todoApp.war"]

command used to build dockerfiles are as below

 sudo docker build -t java-img  -f java-dockerfile .
 docker run --name javacontainer -d -p 4040:9090 java-img

spring boot application consist jdbc url as follow

spring.datasource.url=jdbc:mysql://localhost:3030/ToDoList

i am not able to start project because spring boot application in docker is not able to connect mysql db which is in another container.

one solution i found is to bring two docker container in one docker network or link docker container. can anyone please suggest good solution, modified docker run command and modified jdbc url.

解决方案

Put them into one network and use container names as hostnames:

docker network create foo
docker run --network=foo --name mysqlcontainer -d mysql-img
docker run --network=foo --name javacontainer -d java-img

Dont expose ports - they are exposed automatically between containers inside network.

To connect inside, use mysqlcontainer:3306 and javacontainer:9090.

To connect from host, you will need port exposing.

这篇关于如何在Spring Boot Docker容器中访问MySQL Docker容器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆