docker上部署nacos启用mysql持久化并挂载到本地配置

1. 获取nacos镜像

命令1搜索nacos镜像: docker search nacos
命令2拉取nacos镜像: docker pull nacos/nacos-server

2.创建临时容器用于拷贝配置文件

docker run -p 8848:8848 --name nacostest -d nacos/nacos-server:latest

3.拷贝nacos配置文件,用于后续的本地挂载

#创建文件夹
mkdir -p /usr/local/nacos/conf
mkdir -p /usr/local/nacos/logs
#配置文件复制 
docker cp nacostest:/home/nacos/logs/ /usr/local/nacos/
docker cp nacostest:/home/nacos/conf/ /usr/local/nacos/

4.删除临时的nacos容器,需要先停止,在删除

docker stop nacostest
docker rm nacostest

5.创建nacos持久到mysql的数据库

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
CREATE TABLE `config_info` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` VARCHAR(255) NOT NULL COMMENT 'data_id',
  `group_id` VARCHAR(255) DEFAULT NULL,
  `content` LONGTEXT NOT NULL COMMENT 'content',
  `md5` VARCHAR(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` TEXT COMMENT 'source user',
  `src_ip` VARCHAR(50) DEFAULT NULL COMMENT 'source ip',
  `app_name` VARCHAR(128) DEFAULT NULL,
  `tenant_id` VARCHAR(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` VARCHAR(256) DEFAULT NULL,
  `c_use` VARCHAR(64) DEFAULT NULL,
  `effect` VARCHAR(64) DEFAULT NULL,
  `type` VARCHAR(64) DEFAULT NULL,
  `c_schema` TEXT,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` VARCHAR(255) NOT NULL COMMENT 'data_id',
  `group_id` VARCHAR(255) NOT NULL COMMENT 'group_id',
  `datum_id` VARCHAR(255) NOT NULL COMMENT 'datum_id',
  `content` LONGTEXT NOT NULL COMMENT '内容',
  `gmt_modified` DATETIME NOT NULL COMMENT '修改时间',
  `app_name` VARCHAR(128) DEFAULT NULL,
  `tenant_id` VARCHAR(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` VARCHAR(255) NOT NULL COMMENT 'data_id',
  `group_id` VARCHAR(128) NOT NULL COMMENT 'group_id',
  `app_name` VARCHAR(128) DEFAULT NULL COMMENT 'app_name',
  `content` LONGTEXT NOT NULL COMMENT 'content',
  `beta_ips` VARCHAR(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` VARCHAR(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` TEXT COMMENT 'source user',
  `src_ip` VARCHAR(50) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` VARCHAR(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` VARCHAR(255) NOT NULL COMMENT 'data_id',
  `group_id` VARCHAR(128) NOT NULL COMMENT 'group_id',
  `tenant_id` VARCHAR(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` VARCHAR(128) NOT NULL COMMENT 'tag_id',
  `app_name` VARCHAR(128) DEFAULT NULL COMMENT 'app_name',
  `content` LONGTEXT NOT NULL COMMENT 'content',
  `md5` VARCHAR(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` TEXT COMMENT 'source user',
  `src_ip` VARCHAR(50) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` BIGINT(20) NOT NULL COMMENT 'id',
  `tag_name` VARCHAR(128) NOT NULL COMMENT 'tag_name',
  `tag_type` VARCHAR(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` VARCHAR(255) NOT NULL COMMENT 'data_id',
  `group_id` VARCHAR(128) NOT NULL COMMENT 'group_id',
  `tenant_id` VARCHAR(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` BIGINT(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` BIGINT(64) UNSIGNED NOT NULL,
  `nid` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `data_id` VARCHAR(255) NOT NULL,
  `group_id` VARCHAR(128) NOT NULL,
  `app_name` VARCHAR(128) DEFAULT NULL COMMENT 'app_name',
  `content` LONGTEXT NOT NULL,
  `md5` VARCHAR(32) DEFAULT NULL,
  `gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `src_user` TEXT,
  `src_ip` VARCHAR(50) DEFAULT NULL,
  `op_type` CHAR(10) DEFAULT NULL,
  `tenant_id` VARCHAR(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';


CREATE TABLE `tenant_info` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` VARCHAR(128) NOT NULL COMMENT 'kp',
  `tenant_id` VARCHAR(128) DEFAULT '' COMMENT 'tenant_id',
  `tenant_name` VARCHAR(128) DEFAULT '' COMMENT 'tenant_name',
  `tenant_desc` VARCHAR(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` VARCHAR(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` BIGINT(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` BIGINT(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

CREATE TABLE `users` (
	`username` VARCHAR(50) NOT NULL PRIMARY KEY,
	`password` VARCHAR(500) NOT NULL,
	`enabled` BOOLEAN NOT NULL
);

CREATE TABLE `roles` (
	`username` VARCHAR(50) NOT NULL,
	`role` VARCHAR(50) NOT NULL,
	UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);

CREATE TABLE `permissions` (
    `role` VARCHAR(50) NOT NULL,
    `resource` VARCHAR(255) NOT NULL,
    `action` VARCHAR(8) NOT NULL,
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);

INSERT INTO users (username, PASSWORD, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);

INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

6.创建容器并设置开机启动,设置本地挂载,配置mysql持久化

docker run -d \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=mysql地址 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=mysql数据库账号\
-e MYSQL_SERVICE_PASSWORD=mysql数据库密码 \
-e MYSQL_SERVICE_DB_NAME=mysql数据库名称\
-e TIME_ZONE='Asia/Shanghai' \
-v /usr/local/nacos/logs:/home/nacos/logs \
-v /usr/local/nacos/conf:/home/nacos/conf \
-p 8848:8848 \
--name nacos \
--restart=always \
nacos/nacos-server:latest

7.浏览器测试登录

uri地址:http://服务器地址:8848/nacos 账号:nacos 密码:nacos

<think>好的,用户在使用Docker部署Nacos时遇到了无法创建命名空间的问题。我需要根据提供的引用内容,结合常见的问题和解决方案来帮助他解决这个问题。 首先,用户提供的两个引用都是关于Docker部署Nacos配置,其中引用了不同的版本和不同的环境变量设置。我需要检查这些配置中是否存在可能导致无法创建命名空间的潜在问题。 可能的排查方向包括: 1. **数据库连接配置**:Nacos需要正确配置MySQL数据库才能持久化数据,包括命名空间等信息。如果数据库连接失败,可能导致创建命名空间失败。需要检查环境变量中的MySQL配置是否正确,比如主机地址、端口、用户名、密码、数据库名称等。引用2中提到了设置SPRING_DATASOURCE_PLATFORM、MYSQL_SERVICE_HOST等变量,用户是否漏掉了这些配置? 2. **权限问题**:数据库用户是否有足够的权限访问指定的数据库?例如,用户是否被授权对nacos数据库进行操作,或者数据库是否存在权限限制,导致无法写入。 3. **认证配置**:引用2中启用Nacos的认证功能(NACOS_AUTH_ENABLE=true),如果用户没有正确配置认证信息,可能在创建命名空间时被拒绝访问。需要检查是否启用了认证,以及请求时是否携带了正确的Token或登录信息。 4. **版本兼容性问题**:用户使用的Nacos版本是否有已知的bug?例如,某些旧版本可能存在无法创建命名空间的问题。引用1使用的是v2.0.4,引用2是v2.2.0,用户可能使用的版本是否有差异? 5. **网络配置和端口映射**:虽然用户的问题是关于创建命名空间,但需要确保Nacos的各个端口(如8848、9848、9849)正确映射,且容器内的服务可以正常访问数据库。如果数据库在另一个容器或远程主机,需确保网络连通性。 6. **日志分析**:查看Nacos的日志文件,是否有错误信息提示。例如,数据库连接失败、权限拒绝、认证失败等。引用2中挂载了日志目录,用户可以通过查看日志获取更多信息。 7. **初始化数据库脚本**:Nacos需要初始化数据库表结构,用户是否执行了正确的SQL脚本?如果数据库中没有必要的表,可能导致功能异常。 8. **配置模式是否正确**:是否设置了MODE=standalone,确保以单机模式运行?集群模式下可能需要额外的配置。 可能的解决方案步骤: 1. 检查数据库连接配置是否正确,包括主机、端口、用户名、密码、数据库名。特别是确保MYSQL_SERVICE_HOST指向正确的数据库地址,且数据库服务正常运行。 2. 验证数据库权限,确保使用的数据库用户有权限访问和修改nacos数据库。 3. 检查是否启用了认证,如果启用了,需要在创建命名空间时使用有效的Token或进行登录。例如,在请求头中添加Authorization字段。 4. 查看Nacos日志,确认是否有错误信息。使用docker logs命令或查看挂载的日志文件。 5. 确保已正确初始化数据库,执行了Nacos提供的SQL脚本(如nacos-mysql.sql)。 6. 确认使用的Nacos版本是否存在已知问题,考虑升级到较新的稳定版本,如v2.2.0。 7. 检查网络配置,确保Nacos容器能够访问MySQL数据库。例如,如果数据库在宿主机,可能需要使用宿主机的IP而不是localhost。 此外,用户可能在配置时遗漏了必要的环境变量,或者在运行容器时没有正确设置参数。比如,在引用2中,配置了较多的环境变量,包括数据库相关的和认证相关的,而用户是否在部署时也正确设置了这些? 可能还需要提醒用户,在创建命名空间时,是否使用了正确的API或控制台操作,是否有权限问题。例如,在启用认证后,需要先登录获取Token,再在API请求中使用该Token进行认证。 总结来说,需要从数据库配置、权限、认证、日志、版本等方面逐一排查,找出导致无法创建命名空间的具体原因。</think>### Docker部署Nacos无法创建命名空间的解决方案 #### 1. 检查数据库配置 Nacos命名空间数据依赖数据库存储,确保正确配置MySQL连接参数: ```bash -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=your_mysql_host \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_DB_NAME=nacos \ -e MYSQL_SERVICE_USER=your_username \ -e MYSQL_SERVICE_PASSWORD=your_password \ ``` **验证步骤**: - 手动登录MySQL验证账号权限 - 检查nacos库是否存在且包含初始化表结构(需执行nacos-mysql.sql脚本[^2]) - 使用`telnet your_mysql_host 3306`测试网络连通性 #### 2. 权限与认证配置启用了鉴权功能(Nacos 2.2.0+默认开启): ```bash -e NACOS_AUTH_ENABLE=true \ -e NACOS_AUTH_TOKEN=your_secret_key \ ``` **操作要求**: - 通过控制台登录后操作(默认账号nacos/nacos) - API请求需携带JWT Token: ```http Authorization: Bearer eyJhbGciOiJIUzI1NiIs... ``` #### 3. 版本验证与升级 已知v2.0.4存在部分API兼容性问题,建议升级至v2.2.0: ```bash docker pull nacos/nacos-server:v2.2.0 # 使用引用[2]的完整配置启动容器 ``` #### 4. 日志分析 查看容器日志定位具体错误: ```bash docker logs -f --tail 100 nacos2.2.0 # 或检查挂载目录的日志文件 tail -f /nacos/logs/nacos.log ``` 常见错误示例: - `CREATE_NAMESPACE_ERROR: 数据库连接失败` - `AccessDeniedException: 认证失败` #### 5. 网络策略配置 确保容器间网络互通: ```bash # 创建专用网络 docker network create nacos-net # MySQL容器加入网络 docker run --net nacos-net --name mysql ... # Nacos容器使用相同网络 docker run --net nacos-net -e MYSQL_SERVICE_HOST=mysql ... ``` #### 6. 完整部署示例(带鉴权) ```bash docker run -d -p 8848:8848 -p 9848:9848 -p 9849:9849 \ -e NACOS_AUTH_ENABLE=true \ -e MODE=standalone \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=mysql_host \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_DB_NAME=nacos \ -e MYSQL_SERVICE_USER=nacos \ -e MYSQL_SERVICE_PASSWORD=SecurePass123 \ -v /nacos/logs:/home/nacos/logs \ --restart always \ --name nacos \ nacos/nacos-server:v2.2.0 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值