解决mysql 连接不上或者只能配置内网ip,当mysql启动后ip会变化导致nacos无法连接mysql导致登录不了等问题
首先下载docker nacos
# Nacos Docker ## 安装说明https://github.com/nacos-group/nacos-docker.git
## Quick Start
docker run --name nacos-quick -e MODE=standalone -p 8848:8848 -p 9848:9848 -d nacos/nacos-server:2.0.2
```
## Advanced Usage
* Tips: You can change the version of the Nacos image in the compose file from the following configuration.
`example/.env`
```dotenv
NACOS_VERSION=2.0.2
Run the following command:
* Clone project
git clone --depth 1 https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
* Standalone Derby
docker-compose -f example/standalone-derby.yaml up
* Standalone Mysql 命令加-d表示在后台运行
# Using mysql 5.7
docker-compose -f example/standalone-mysql-5.7.yaml up
# Using mysql 8
docker-compose -f example/standalone-mysql-8.yaml up
以上是README文件说明等等 略
Standalone Mysql5.7 但非一起创建
mysql compose文件如下mysql-compose.yaml
version: '3.5'
services:
mysql:
image: mysql:5.7.32
container_name: mysql
restart: unless-stopped
volumes:
- "./mysqldata:/var/lib/mysql"
- "./mysqllogs:/var/log/mysql"
- "./mysqld.cnf:/etc/mysql/conf.d/my.cnf"
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: '12345678'
TZ: Asia/Shanghai
command:
--gtid-mode=ON
--enforce-gtid-consistency=ON
--log-bin=/var/lib/mysql/mysql-bin
--binlog-format=row
--binlog-row-image=full
--server-id=1
--lower-case-table-names=1
--max_connections=1000
--expire_logs_days=10
networks:
- mysql
networks:
mysql:
name: mynet
启动部署好mysql ,mysql中nacos 的相关配置略
nacos compose文件
version: "3.5"
services:
nacos:
image: nacos/nacos-server:latest
container_name: nacos-standalone-mysql
env_file:
- ../env/nacos-standlone-mysql-link.env
volumes:
- ./standalone-logs/:/home/nacos/logs
#- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8848:8848"
- "9848:9848"
- "9555:9555"
restart: on-failure
networks:
- mynet#****配置和mysql容器互通的网络net-docker
networks:
mynet:
external: true
name: mysql
还有个配置文件nacos-standlone-mysql-link.env
PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=mysql #172.22.0.2 这里配置内网ip或容器名
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=12345678
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
通常很多人都是直接配置了ip,如去查询mysql的 网络信息
查询机器运行中的mysql,命令docker inspect 容器名;如docker inspect mysql "Networks": { "mysq_default": { 略... "Gateway": "172.22.0.1", "IPAddress": "172.22.0.2", .... } } 得到mysql_default和172.22.0.2
将MYSQL_SERVICE_HOST配置成172.22.0.2,这样重新启动nacos也能正常使用,但是当mysql重启后内部ip改变了,nacos就连不上mysql导致报错。
因此Nacos和MySQL容器如果连接到同一个网络中,并且网络设置正确,那么您可以通过容器名称来访问MySQL容器,而无需使用MySQL的内网IP,如MYSQL_SERVICE_HOST=mysql
这样,Nacos容器将根据容器名称解析MySQL容器的IP地址,并与其通信。
请确保您的Nacos和MySQL容器都在同一个网络中,并且网络设置正确。
希望这可以帮助到您。如果存在有其他问题,请指出。
后面还会继续总结其他构建方式!