问题描述:
将JAVA微服务项目smart-demo上传到阿里云服务器的/tmp目录下,然后使用docker-compose up -d一键运行容器,发现本地Navicat和阿里云服务器都无法连接mysql。重启阿里云服务器后,/tmp目录下的smart-demo消失,docker start命令启动mysql容器后,本地Navicat可以连接mysql容器。
报错信息:
docker-compose.yml 文件配置
version: "3.2"
services:
nacos:
image: nacos/nacos-server
networks:
hc_net:
ipv4_address: 172.18.0.100
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:5.7.25
networks:
hc_net:
ipv4_address: 172.18.0.101
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
ports:
- "3306:3306"
rabbitmq:
image: rabbitmq:management
networks:
hc_net:
ipv4_address: 172.18.0.102
environment:
RABBITMQ_DEFAULT_USER: root
RABBITMQ_DEFAULT_PASS: root
ports:
- "5672:5672"
- "15672:15672"
smart-admin:
networks:
hc_net:
ipv4_address: 172.18.0.103
extra_hosts:
- "nacos:172.18.0.100"
- "rabbitmq:172.18.0.102"
- "mysql:172.18.0.101"
build: ./smart-admin
smart-dubbo-db:
networks:
hc_net:
ipv4_address: 172.18.0.104
build: ./smart-dubbo-db
smart-gateway:
networks:
hc_net:
ipv4_address: 172.18.0.105
build: ./smart-gateway
ports:
- "8084:8084"
networks:
hc_net:
driver: bridge
ipam:
driver: default
config:
-
subnet: 172.18.0.0/24
报错原因:
挂载的目录问题。
将smart-demo文件上传到阿里云服务器时,该文件包含了docker-compose文件描述mysql挂载数据卷时所挂载的两个目录,即 $PWD/mysql/data 和 $PWD/mysql/conf,这两个目录包含一些未知信息。
解决方案1:将这两个文件在阿里云服务器中删除后,重启容器,本地Navicat可以连接数据库。
解决方案2:重启阿里云服务器后,服务器自动清理/tmp目录下的文件,/tmp目录下的smart-demo文件消失,即挂载的两个目录也消失了,但是容器挂载目录的信息还在,本地Navicat可以连接数据库,docker容器会自动创建两个新的$PWD/mysql/data 和 $PWD/mysql/conf目录去做持久化操作。
解决方案3:修改docker-compose文件中关于mysql数据库目录挂载的信息,将宿主机目录进行更换,可以换成一个不存在的目录,docker容器进行持久化操作时会自动创建这个目录。修改后重新启动容器即可。