Docker部署springboot项目连接容器mysql

今天部署了springboot的项目,数据库使用的是mysql,部署要服务器要连接容器的mysql时遇到的坑。

部署在docker上的mysql相对于一个虚拟空间,springboot连接不能直接使用localhost访问,会造成访问不到。

修改application.yml,将localhost改为db

spring:
  datasource:
    # MySQL 配置
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://db:3306/mall?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
    username: root
    password: root

以上是配置文件mysql的url,注意的是连接url用的是 db

可以把docker中的容器看作独立的虚拟机,springboot访问localhost自然会访问不到mysql,docker容器之间可以通过指定好的服务名称db进行访问,至于db这个名称可以在运行应用时容器的时候指定。

docker启动应用指定连接mysql

把自己的springboot上传到docker images 镜像 可以使用maven打包的方式(具体操作另外查询)

docker run -p 8080:8080 --name mall \
--link mysql:db \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall/logs:/var/logs \
-d mall/ mall-docker:0.0.1-SNAPSHOT #镜像名字

最重要是用 --link 命令 访问容器中的mysql。
--link表示应用可以用db这个域名访问mysql服务

这种方法同样也适合连接redis等其他容器服务,记得修改application的连接地址即可。