# 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内部私有网络之后,项目顺利运行。因为程序的错误原因千奇百怪,解决方法不能一概而论,还需具体问题具体分析。目前仅遇到此一例,故记录在此。

# To Be Continued!😎

Last Updated: 2/24/2021, 4:56:59 PM