Docker中Nacos容器正常启动但网页访问不了,找不到MySQL依赖报错,Innodb日志表损坏

本文讲述了作者遇到的DockerNacos容器访问问题,源于MySQLInnoDB日志表损坏。通过停用、修改my.cnf配置、导出数据库、恢复数据和重启服务,作者提供了详细的故障排查和解决过程。

问题复现

今早打开虚拟机发现打不开了,根据链接解决了。可是docker开启nacos容器后发现容器正常启动,网页却访问不了。使用docker ps命令查看如下,发现所有容器都正常启动。
nacos无法正常启动
nacos无法访问

使用find / -name “start.out” 找到其详细日志文件的所在路径。
nacos日志文件
使用cat /data/soft/nacos/logs/start.out 命令查看详情信息,也可以加上过滤字段快速定位原因cat /data/soft/nacos/logs/start.out | grep "Error"“Falied”。可以看到是连接mysql出现了问题。
查找nacos日志错误信息
使用docker logs mysql 查看mys

### 三级标题:DockerNacos 无法连接 MySQL 数据库的解决方案 在 Docker 环境中部署 Nacos 并尝试连接 MySQL 数据库时,出现连接失败的情况较为常见。此类问题通常涉及网络配置、数据库连接参数设置、数据库初始化等多个方面。 确保 MySQL 数据库已正确启动,并且可以通过 Nacos 容器访问。可以通过以下命令测试容器是否能够访问 MySQL 服务: ```bash docker exec -it <nacos_container_id> ping <mysql_host> docker exec -it <nacos_container_id> telnet <mysql_host> 3306 ``` 若 MySQL 服务部署在宿主机上,且使用的是 `localhost` 作为连接地址,则需将其替换为宿主机的 IP 地址,以确保容器能够正确连接。例如,将 `localhost` 替换为 `172.17.0.1` 或宿主机的局域网 IP 地址 [^2]。 在 Nacos 的 `application.properties` 文件中,需确保以下配置项已正确设置: ```properties spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://172.17.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8 db.user=root db.password=lcclove123 ``` 特别注意 `serverTimezone` 和 `allowPublicKeyRetrieval` 参数的设置,它们对 MySQL 8.x 版本尤为重要 [^1]。 若通过 Docker Compose 或直接运行容器,可通过环境变量传递数据库连接信息。例如: ```bash docker run -d \ --name mynacos \ -e MODE=standalone \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=172.17.0.1 \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=lcclove123 \ -e MYSQL_SERVICE_DB_NAME=nacos \ nacos/nacos-server ``` 此方式可避免手动修改配置文件,提高部署效率 [^2]。 确保 MySQL 数据库中已创建相应的数据库,并执行了 Nacos 提供的 SQL 脚本(如 `nacos-mysql.sql`)以初始化结构。例如: ```sql CREATE DATABASE IF NOT EXISTS nacos; USE nacos; CREATE TABLE IF NOT EXISTS config_info ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, data_id VARCHAR(255) NOT NULL, group_id VARCHAR(255), content LONGTEXT NOT NULL, md5 VARCHAR(32), gmt_create DATETIME NOT NULL DEFAULT '2010-05-05 00:00:00', gmt_modified DATETIME NOT NULL DEFAULT '2010-05-05 00:00:00', src_user TEXT, src_ip VARCHAR(50) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 若数据库为空或结构不完整,也会导致连接失败 [^1]。 检查 Nacos 容器MySQL 容器是否处于同一 Docker 网络中。可以通过创建自定义网络并使两个容器加入该网络来实现: ```bash docker network create nacos-net docker run --name mymysql -p 3306:3306 --network nacos-net -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 docker run --name mynacos --network nacos-net -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=mymysql -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root -e MYSQL_SERVICE_DB_NAME=nacos -p 8848:8848 nacos/nacos-server ``` 通过上述方式,可以确保容器之间通过服务名称进行通信,避免网络不通导致的连接问题 [^4]。 最后,检查 Nacos 启动日志(如 `logs/start.out` 或 `logs/startup.log`),以获取更详细的错误信息,从而进一步定位问题所在。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值