docker compose 部署spring boot 与MySQL 容器间网络连不通-dockercompose部署springboot与mysql容器间网络连不通
背景
最近在弄dockers的集成部署,平常我们用到数据库都是远程的,部署在阿里云或者其他云上
最近接到的需求是需要完整的跟项目一起部署在docker 上面,并且通过读取env配置的方式进行yml的配置
但是今天遇到了一个问题,springboot 项目与MySQL同时部署后,访问不到数据库,并且通过本机的链接工具却能连上,

解决方案
其实这里的错误重点是 Caused by: java.net.NoRouteToHostException: No route to host (Host unreachable)
这句 主机不可达
这就知道了其实就是springboot 无法访问到mysql
然后通过百度知道了docker容器之间的网咯是相互独立的,如果要联通必须通过link 去链接
我的项目是通过docker compose启动的,所以在yml中可以这样写
version: '3.1'
services:
mysql:
container_name: mysql
image: mysql/mysql-server:5.7
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_HOST: '%'
restart: always
volumes:
- "./data/dialog-console-data/mysql:/var/lib/mysql"
- "./data/mysql/config/my.cnf:/etc/my.cnf"
- "./data/mysql/init:/docker-entrypoint-initdb.d/"
dsconsole:
container_name:xxxxx
image: xxxxx
build:
context: .
dockerfile: Dockerfile
ports:
- "8888:8888"
environment:
## 读取 env配置
MYSQL_URL: ${MYSQL_URL}
MYSQL_USERNAME: ${MYSQL_USERNAME}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MINIO_OOS_URL: ${MINIO_OOS_URL}
MINIO_OOS_PORT: ${MINIO_OOS_PORT}
MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY}
MINIO_SECRET_KEY: ${MINIO_SECRET_KEY}
MINIO_BUCKET_NAME: ${MINIO_BUCKET_NAME}
restart: always
depends_on:
- mysql
## 建立连接
links:
- mysql
成功启动后可以试试 springboot 容易能不能ping通MySQL
docker exec -it xxxx ping mysql

然后,最重要的一点,application.yml 中的配置我最开始填的是ip,但结果是访问不了的,按理来说是可以的,后面我将ip替换成了容器名称,这就就能访问

最终解决
其他文章