Skip to content

docker安装nacos

一、简介

使用 Docker 安装 Nacos 时,最需要关注的是版本差异。

1.x 与 2.x 不能直接平滑升级,但整体安装思路是一致的。2.x 额外引入了 gRPC 端口,因此在容器部署时需要一并映射,否则客户端可能无法正常通过 RPC 完成注册与发现。

二、参数介绍

docker里的参数

| 属性名称 | 描述 | 选项 |

| --------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------ |

| MODE | 系统启动方式: 集群/单机 | cluster/standalone默认 cluster |

| NACOS_SERVERS | 集群地址 | p1:port1空格ip2:port2 空格ip3:port3 |

| PREFER_HOST_MODE | 支持IP还是域名模式 | hostname/ip 默认 ip |

| NACOS_SERVER_PORT | Nacos 运行端口 | 默认 8848 |

| NACOS_SERVER_IP | 多网卡模式下可以指定IP | |

| SPRING_DATASOURCE_PLATFORM | 单机模式下支持MYSQL数据库 | mysql / 空 默认:空 |

| MYSQL_SERVICE_HOST | 数据库 连接地址 | |

| MYSQL_SERVICE_PORT | 数据库端口 | 默认 : 3306 |

| MYSQL_SERVICE_DB_NAME | 数据库库名 | |

| MYSQL_SERVICE_USER | 数据库用户名 | |

| MYSQL_SERVICE_PASSWORD | 数据库用户密码 | |

| MYSQL_SERVICE_DB_PARAM | 数据库连接参数 | default : characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false |

| MYSQL_DATABASE_NUM | 数据库编号 | 默认 :1 |

| JVM_XMS | -Xms | 默认 :1g |

| JVM_XMX | -Xmx | 默认 :1g |

| JVM_XMN | -Xmn | 默认 :512m |

| JVM_MS | -XX:MetaspaceSize | 默认 :128m |

| JVM_MMS | -XX:MaxMetaspaceSize | 默认 :320m |

| NACOS_DEBUG | 是否开启远程DEBUG | y/n 默认 :n |

| TOMCAT_ACCESSLOG_ENABLED | server.tomcat.accesslog.enabled | 默认 :false |

| NACOS_AUTH_SYSTEM_TYPE | 权限系统类型选择,目前只支持nacos类型 | 默认 :nacos |

| NACOS_AUTH_ENABLE | 是否开启权限系统 | 默认 :false |

| NACOS_AUTH_TOKEN_EXPIRE_SECONDS | token 失效时间 | 默认 :18000 |

| NACOS_AUTH_TOKEN | token | 默认 :SecretKey012345678901234567890123456789012345678901234567890123456789 |

| NACOS_AUTH_CACHE_ENABLE | 权限缓存开关 ,开启后权限缓存的更新默认有15秒的延迟 | 默认 : false |

| MEMBER_LIST | 通过环境变量的方式设置集群地址 | 例子:192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809 |

| EMBEDDED_STORAGE | 是否开启集群嵌入式存储模式 | embedded 默认 : none |

| NACOS_AUTH_CACHE_ENABLE | nacos.core.auth.caching.enabled | default : false |

| NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE | nacos.core.auth.enable.userAgentAuthWhite | default : false |

| NACOS_AUTH_IDENTITY_KEY | nacos.core.auth.server.identity.key | default : serverIdentity |

| NACOS_AUTH_IDENTITY_VALUE | nacos.core.auth.server.identity.value | default : security |

| NACOS_SECURITY_IGNORE_URLS | nacos.security.ignore.urls | default : /,/error,//*.css,//.js,/**/.html,//*.map,//.svg,/**/.png,//*.ico,/console-fe/public/,/v1/auth/,/v1/console/health/,/actuator/,/v1/console/server/ |

三、初始化脚本

官网的地址:https://github.com/alibaba/nacos/releases

初始化脚本地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql

四、1.x版本安装

docker run --env MODE=standalone --name nacos -d -p 8848:8848 --restart=unless-stopped nacos/nacos-server:v1.4.3

五、2.0.0-2.2.0版本安装

docker run -d -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=192.168.0.104 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=nacos -e MYSQL_SERVICE_DB_NAME=nacos -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=512m  -p 8848:8848 --restart=unless-stopped --name nacos nacos/nacos-server:2.0.4

六、2.2.1及以上版本安装

从 Nacos 2.2.1 开始,token.secret.keyserver.identity 等旧参数被移除。 如果开启鉴权,需要在启动时显式传入 NACOS_AUTH_IDENTITY_KEYNACOS_AUTH_IDENTITY_VALUENACOS_AUTH_TOKEN 等参数。

注意:

  1. 文档中提供的密钥为公开密钥,在实际部署时请更换为其他密钥内容,防止密钥泄漏导致安全风险。

  2. 在2.2.0.1版本后,社区发布版本将移除以文档如下值作为默认值,需要自行填充,否则无法启动节点。

  3. 密钥需要保持节点间一致,长时间不一致可能导致403 invalid token错误

  4. 自定义密钥时,推荐将配置项设置为Base64编码的字符串,且原始密钥长度不得低于32字符

docker run -d -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e NACOS_AUTH_TOKEN=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg= -e NACOS_AUTH_IDENTITY_KEY=NACOS_AUTH_IDENTITY_KEY -e NACOS_AUTH_IDENTITY_VALUE=NACOS_AUTH_IDENTITY_VALUE -e MYSQL_SERVICE_HOST=192.168.0.104 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=nacos -e MYSQL_SERVICE_DB_NAME=nacos -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=512m  -p 8848:8848 --restart=unless-stopped --name nacos nacos/nacos-server:2.2.1

七、nacos升级

如果将 2.0.4 升级到 2.1.0,且使用了数据库持久化,则需要先执行以下 SQL。 如果没有启用持久化,可以跳过这一步。

ALTER TABLE config_info MODIFY COLUMN group_id varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL AFTER data_id;
ALTER TABLE config_info MODIFY COLUMN encrypted_data_key text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '秘钥' AFTER c_schema;
ALTER TABLE config_info_aggr MODIFY COLUMN group_id varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id' AFTER data_id;
ALTER TABLE config_info_beta MODIFY COLUMN encrypted_data_key text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '秘钥' AFTER tenant_id;
ALTER TABLE his_config_info MODIFY COLUMN encrypted_data_key text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '秘钥' AFTER tenant_id;
ALTER TABLE nacos.config_info ADD encrypted_data_key TEXT NOT NULL;
ALTER TABLE nacos.config_info_beta ADD encrypted_data_key TEXT NOT NULL;
ALTER TABLE nacos.his_config_info ADD encrypted_data_key TEXT NOT NULL;