拉取nacos镜像
docker pull nacos/nacos-server
创建目录
日志目录
mkdir -p /home/nacos/logs
极简方式启动
docker run \
--name nacos -itd \
-e MODE=standalone \
-p 18847:8848 \
-v /home/nacos/logs:/home/nacos/logs \
nacos/nacos-server
- -p:指定了宿主机端口为18847
- -v:指定宿主机与nacos的日志目录映射
- -e:指定环境变量(或–env)。MODE=standalone: 单机, MODE=cluster:集群(默认模式)
访问
http://localhost:18847/nacos
账号密码:nacos/nacos
数据库方式启动
宿主机创建数据库&用户授权
create database if not exists nacos_in_docker default charset utf8mb4 collate utf8mb4_general_ci;
grant all privileges on nacos_in_docker.* to nacos@'%';
flush privileges;
创建配置文件
文件名:
/home/nacos/init.d/custom.properties
文件内容
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=""
db.num=1
db.url.0=jdbc:mysql://xxx.xxx.xxx.xxx:3306/nacos_in_docker?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos
db.password=nacos
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true
注意:数据库的地址不能是localhost,因为localhost应该指向了nacos容器。
数据库设置
设置为主机IP
如果是在云主机上部署nacos镜像,可使用云主机的内网地址。(经测试,华为云可行)
设置为docker的虚拟网卡地址
在宿主机使用“ifconfig”命令,一般会看到一个docker0的网卡,地址一般是172.17.0.1,使用这个地址。(经测试,华为云可行)
启动
docker run \
--name nacos_db -itd \
-p 18847:8848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /home/nacos/logs:/home/nacos/logs \
-v /home/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
nacos/nacos-server
日志查看
tail -n1000 -f /home/nacos/logs/nacos.log
常见问题处理
找不到数据源
日志中报错:No DataSource set
......
Caused by: java.lang.IllegalStateException: No DataSource set
at org.springframework.util.Assert.state(Assert.java:73)
at org.springframework.jdbc.support.JdbcAccessor.obtainDataSource(JdbcAccessor.java:77)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:371)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:452)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:462)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:473)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:480)
.....
解决方案:将custom.properties中属性设置为空字符串
# 这里将属性值写为mysql就掉坑里了
spring.datasource.platform=""