# 2021-02-23记录关于Springboot部署后无法访问mysql和redis的问题
问题的起因是因为某云未知问题导致与其他项目同样的docker部署无法成功,反应的错误为mysql和redis在Springboot启动后均提示无法连接。而使用外部连接工具连接则完全正常。在排除安全设置、端口、账号密码等原因之后依然无法顺利启动。故将环境调整为Docker内部的私有网络,以此进行各组件间的通信。
docker-compose文件优化如下,加入networks配置
version: '2.2'
services:
mysql:
image: mysql:5.7
hostname: mysql
container_name: dining_mysql
ports:
- 33006:3306
volumes:
- ./data/mysql/db:/var/lib/mysql
- ./data/mysql/conf/my.cnf:/etc/mysql/my.cnf
environment:
- I18N_LOCALE=zh-CN
- MYSQL_ROOT_PASSWORD=Root_123456
- TZ=Asia/Shanghai
networks:
- java-net
redis:
image: redis:5.0
container_name: dining_redis
hostname: redis
ports:
- 26379:6379
volumes:
- ./data/redis:/data
command: redis-server --appendonly yes --requirepass redis@dxspt_1q2w3a
networks:
- java-net
backend:
build: images/java
hostname: backend
container_name: dining_backend
ports:
- 8001:8001
volumes:
- ./data/backend:/opt
environment:
- SPRING_PROFILE_ACTIVE=prod
- TZ=Asia/Shanghai
depends_on:
- mysql
- redis
links:
- mysql:mysql
- redis:redis
networks:
- java-net
nginx:
image: nginx:1.14.2
container_name: dining_nginx
ports:
- 80:80
volumes:
- ./data/nginx/www:/opt
- ./data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- java-net
depends_on:
- backend
links:
- backend:backend
networks:
java-net:
driver: bridge
application.yml的配置需要进行调整
注意
redis的端口保持6379
url: jdbc:mysql://mysql/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8
username: username
password: password
redis:
database: 0
host: redis
lettuce:
pool:
max-active: 8 #最大连接数据库连接数,设 0 为没有限制
max-idle: 8 #最大等待连接中的数量,设 0 为没有限制
max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
min-idle: 0 #最小等待连接中的数量,设 0 为没有限制
shutdown-timeout: 100ms
password: ''
port: 6379
至此,在使用docker内部私有网络之后,项目顺利运行。因为程序的错误原因千奇百怪,解决方法不能一概而论,还需具体问题具体分析。目前仅遇到此一例,故记录在此。