docker部署nacos3.1.0适配pgsql

发布时间:2026/9/30 14:30:41
docker部署nacos3.1.0适配pgsql
摘要本文介绍如何在 Docker 中部署 Nacos 3.1.0 并接入 PostgreSQL 数据库。主要步骤包括拉取镜像、创建并授权宿主机目录、通过临时容器拷贝配置文件、在 PostgreSQL 中创建 Nacos 所需数据表、修改数据源与鉴权配置、上传 PostgreSQL 驱动插件最后启动容器并挂载目录。文中提供完整的 SQL 建表脚本、application.properties 配置示例及启动命令帮助读者快速完成 Nacos 与 PostgreSQL 的集成部署。1. 拉取 Nacos:v3.1.0 镜像dockerpull nacos/nacos-server:v3.1.02. 创建宿主机目录mkdir-p/data/nacos/{conf,logs,data,plugins}3. 设置目录权限chmod777/data/nacos/{conf,logs,data,plugins}4. 创建临时容器dockerrun-d\--namenacos\--restartalways\-p8848:8848\-eMODEstandalone\nacos/nacos-server:v2.3.25. 拷贝配置文件dockercpnacos:/home/nacos/conf /data/nacosdockercpnacos:/home/nacos/data /data/nacosdockercpnacos:/home/nacos/logs /data/nacos6. 删除临时容器dockerrm-fnacos7. PostgreSQL 建 Nacos 表创建 nacos 库后在 public 模式下执行脚本CREATETABLEpublic.config_info(id bigserialNOTNULL,data_idvarchar(255)NOTNULL,group_idvarchar(128)NOTNULL,tenant_idvarchar(128)DEFAULT::charactervaryingNOTNULL,app_namevarchar(128)NULL,contenttextNOTNULL,md5varchar(32)NULL,gmt_createtimestampDEFAULTnow()NOTNULL,gmt_modifiedtimestampDEFAULTnow()NOTNULL,src_uservarchar(128)NULL,src_ipvarchar(50)NULL,c_descvarchar(256)NULL,c_usevarchar(64)NULL,effectvarchar(64)NULL,typevarchar(64)NULL,c_schematextNULL,encrypted_data_keyvarchar(1024)DEFAULT::charactervaryingNOTNULL,CONSTRAINTconfig_info_pkeyPRIMARYKEY(id),CONSTRAINTuk_configinfo_datagrouptenantUNIQUE(data_id,group_id,tenant_id));CREATEINDEXidx_config_info_dataidONpublic.config_infoUSINGbtree(data_id);CREATEINDEXidx_config_info_groupidONpublic.config_infoUSINGbtree(group_id);CREATEINDEXidx_config_info_tenantONpublic.config_infoUSINGbtree(tenant_id);CREATETABLEpublic.config_info_aggr(id bigserialNOTNULL,data_idvarchar(255)NOTNULL,group_idvarchar(128)NOTNULL,tenant_idvarchar(128)DEFAULT::charactervaryingNOTNULL,datum_idvarchar(255)NOTNULL,app_namevarchar(128)NULL,contenttextNOTNULL,gmt_modifiedtimestampDEFAULTnow()NOTNULL,CONSTRAINTconfig_info_aggr_pkeyPRIMARYKEY(id),CONSTRAINTuk_configinfoaggr_datagrouptenantdatumUNIQUE(data_id,group_id,tenant_id,datum_id));CREATETABLEpublic.config_info_beta(id bigserialNOTNULL,data_idvarchar(255)NOTNULL,group_idvarchar(128)NOTNULL,tenant_idvarchar(128)DEFAULT::charactervaryingNOTNULL,app_namevarchar(128)NULL,contenttextNOTNULL,beta_ipsvarchar(1024)NULL,md5varchar(32)NULL,gmt_createtimestampDEFAULTnow()NOTNULL,gmt_modifiedtimestampDEFAULTnow()NOTNULL,src_uservarchar(128)NULL,src_ipvarchar(50)NULL,encrypted_data_keyvarchar(1024)DEFAULT::charactervaryingNOTNULL,CONSTRAINTconfig_info_beta_pkeyPRIMARYKEY(id),CONSTRAINTuk_configinfobeta_datagrouptenantUNIQUE(data_id,group_id,tenant_id));CREATETABLEpublic.config_info_gray(id bigserialNOTNULL,data_idvarchar(255)NOTNULL,group_idvarchar(128)NOTNULL,tenant_idvarchar(128)DEFAULT::charactervaryingNOTNULL,app_namevarchar(128)NULL,contenttextNOTNULL,md5varchar(32)NULL,src_uservarchar(128)NULL,src_ipvarchar(100)NULL,gmt_createtimestamp(3)DEFAULTnow()NOTNULL,gmt_modifiedtimestamp(3)DEFAULTnow()NOTNULL,gray_namevarchar(128)NOTNULL,gray_ruletextNOTNULL,encrypted_data_keyvarchar(256)DEFAULT::charactervaryingNOTNULL,CONSTRAINTconfig_info_gray_pkeyPRIMARYKEY(id),CONSTRAINTuk_configinfogray_datagrouptenantgrayUNIQUE(data_id,group_id,tenant_id,gray_name));CREATETABLEpublic.config_info_tag(id bigserialNOTNULL,data_idvarchar(255)NOTNULL,group_idvarchar(128)NOTNULL,tenant_idvarchar(128)DEFAULT::charactervaryingNOTNULL,tag_idvarchar(128)NOTNULL,app_namevarchar(128)NULL,contenttextNOTNULL,md5varchar(32)NULL,gmt_createtimestampDEFAULTnow()NOTNULL,gmt_modifiedtimestampDEFAULTnow()NOTNULL,src_usertextNULL,src_ipvarchar(50)NULL,CONSTRAINTconfig_info_tag_pkeyPRIMARYKEY(id),CONSTRAINTuk_configinfotag_datagrouptenanttagUNIQUE(data_id,group_id,tenant_id,tag_id));CREATETABLEpublic.config_tags_relation(id bigserialNOTNULL,tag_namevarchar(128)NOTNULL,tag_typevarchar(64)NULL,data_idvarchar(255)NOTNULL,group_idvarchar(128)NOTNULL,tenant_idvarchar(128)DEFAULT::charactervaryingNOTNULL,nid bigserialNOTNULL,CONSTRAINTconfig_tags_relation_pkeyPRIMARYKEY(id),CONSTRAINTuk_configtagrelation_configidtagUNIQUE(id,tag_name,tag_type),CONSTRAINTuk_configtags_relation_dataidtagUNIQUE(data_id,group_id,tenant_id,tag_name));CREATEINDEXidx_config_tags_relation_tenantONpublic.config_tags_relationUSINGbtree(tenant_id);CREATETABLEpublic.group_capacity(id bigserialNOTNULL,group_idvarchar(128)DEFAULT::charactervaryingNOTNULL,tenant_idvarchar(128)DEFAULT::charactervaryingNOTNULL,quota int8DEFAULT0NOTNULL,usageint8DEFAULT0NOTNULL,max_size int8DEFAULT0NOTNULL,max_aggr_count int8DEFAULT0NOTNULL,max_aggr_size int8DEFAULT0NOTNULL,max_history_count int8DEFAULT0NOTNULL,gmt_createtimestamp(3)DEFAULTnow()NOTNULL,gmt_modifiedtimestamp(3)DEFAULTnow()NOTNULL,CONSTRAINTgroup_capacity_pkeyPRIMARYKEY(id),CONSTRAINTuk_group_capacity_groupid_tenantidUNIQUE(group_id,tenant_id));CREATETABLEpublic.his_config_info(id int8NOTNULL,nid bigserialNOTNULL,data_idvarchar(255)NOTNULL,group_idvarchar(128)NOTNULL,tenant_idvarchar(128)DEFAULT::charactervaryingNOTNULL,app_namevarchar(128)NULL,contenttextNOTNULL,md5varchar(32)NULL,gmt_createtimestampDEFAULTnow()NOTNULL,gmt_modifiedtimestampDEFAULTnow()NOTNULL,src_uservarchar(128)NULL,src_ipvarchar(50)NULL,op_type bpchar(10)NULL,encrypted_data_keyvarchar(1024)DEFAULT::charactervaryingNOTNULL,publish_typevarchar(50)NULL,gray_namevarchar(128)NULL,ext_infotextNULL,CONSTRAINThis_config_info_pkeyPRIMARYKEY(nid));CREATEINDEXidx_his_config_info_dataidONpublic.his_config_infoUSINGbtree(data_id);CREATEINDEXidx_his_config_info_gmt_modifiedONpublic.his_config_infoUSINGbtree(gmt_modified);CREATETABLEpublic.permissions(rolevarchar(50)NOTNULL,resourcevarchar(255)NOTNULL,actionvarchar(50)NOTNULL,CONSTRAINTuk_role_permissionUNIQUE(role,resource,action));CREATETABLEpublic.roles(usernamevarchar(50)NOTNULL,rolevarchar(50)NOTNULL,CONSTRAINTuk_username_roleUNIQUE(username,role));CREATETABLEpublic.tags(id bigserialNOTNULL,tag_namevarchar(128)NOTNULL,app_namevarchar(128)NULL,typevarchar(64)NULL,create_timetimestampDEFAULTnow()NOTNULL,CONSTRAINTtags_pkeyPRIMARYKEY(id),CONSTRAINTuk_tags_tagnameUNIQUE(tag_name));CREATETABLEpublic.tenant_capacity(id bigserialNOTNULL,tenant_idvarchar(128)DEFAULT::charactervaryingNOTNULL,quota int8DEFAULT0NOTNULL,usageint8DEFAULT0NOTNULL,max_size int8DEFAULT0NOTNULL,max_aggr_count int8DEFAULT0NOTNULL,max_aggr_size int8DEFAULT0NOTNULL,max_history_count int8DEFAULT0NOTNULL,gmt_createtimestamp(3)DEFAULTnow()NOTNULL,gmt_modifiedtimestamp(3)DEFAULTnow()NOTNULL,CONSTRAINTtenant_capacity_pkeyPRIMARYKEY(id),CONSTRAINTuk_tenant_capacity_tenantidUNIQUE(tenant_id));CREATETABLEpublic.tenant_info(id bigserialNOTNULL,kpvarchar(128)NOTNULL,tenant_idvarchar(128)DEFAULT::charactervaryingNOTNULL,tenant_namevarchar(128)DEFAULT::charactervaryingNULL,tenant_descvarchar(256)NULL,create_sourcevarchar(32)NULL,gmt_create int8NOTNULL,gmt_modified int8NOTNULL,CONSTRAINTtenant_info_pkeyPRIMARYKEY(id),CONSTRAINTuk_tenant_info_kptenantidUNIQUE(kp,tenant_id));CREATETABLEpublic.users(usernamevarchar(50)NOTNULL,passwordvarchar(500)NOTNULL,enabledboolDEFAULTtrueNOTNULL,CONSTRAINTusers_pkeyPRIMARYKEY(username));8. 修改 Nacos 配置文件自己改下数据库地址、账号、密码#--------------- 端口配置 ---------------# Nacos 主服务端口默认 8848给 gRPC 客户端和老 API 用nacos.server.main.port${NACOS_APPLICATION_PORT:8848}# 控制台端口3.x 默认 8080浏览器访问用nacos.console.port${NACOS_CONSOLE_PORT:8080}nacos.console.contextPath${NACOS_CONSOLE_CONTEXTPATH:}# 控制台 UI 开关nacos.console.ui.enabledtrue# 控制台远程 server 路径前后端分离部署时才需要改nacos.console.remote.server.context-path${SERVER_SERVLET_CONTEXTPATH:/nacos}#--------------- 数据源配置 ---------------# 告诉 Nacos 用 PostgreSQL 初始化脚本spring.sql.init.platformpostgresql# ★ 必须加显式指定数据源方言为 postgresql否则 Nacos 会回退用 MySQL 驱动nacos.plugin.datasource-dialect.typepostgresql# 数据库数量单机就 1 个db.num1# JDBC URL已去掉 MySQL 专属参数避免驱动解析异常db.url.0jdbc:postgresql://192.168.21.101:5432/nacos?currentSchemapublicreWriteBatchedInsertstrue# 用户名和密码通过 docker -e 环境变量注入db.user.0${SERVICE_USER}db.password.0${SERVICE_PASSWORD}# ★ 必须加显式指定 PostgreSQL 驱动类db.pool.config.driverClassNameorg.postgresql.Driverdb.pool.config.connectionTestQuerySELECT1# 连接池配置db.pool.config.connectionTimeout${DB_POOL_CONNECTION_TIMEOUT:30000}db.pool.config.validationTimeout10000db.pool.config.maximumPoolSize20db.pool.config.minimumIdle2#--------------- Web / Tomcat 配置 ---------------# 服务上下文路径访问路径前缀如 http://ip:8080/nacosnacos.server.contextPath${SERVER_SERVLET_CONTEXTPATH:/nacos}# 访问日志server.tomcat.accesslog.enabledtrue server.tomcat.accesslog.max-days30server.tomcat.accesslog.pattern%h %l %u %t%r%s %b %D %{User-Agent}i %{Request-Source}iserver.tomcat.basedirfile:.# API 错误返回server.error.include-messageALWAYS#--------------- 监控 / Metrics ---------------management.endpoints.web.exposure.includeprometheusmanagement.metrics.export.elastic.enabledfalsemanagement.metrics.export.influx.enabledfalse#--------------- 配置模块 ---------------# 配置推送最大重试次数nacos.config.push.maxRetryTime50#--------------- 服务发现 / Naming 模块 ---------------# 启动时预热数据nacos.naming.data.warmuptrue# 自动清理空服务nacos.naming.empty-service.auto-cleantrue nacos.naming.empty-service.clean.initial-delay-ms50000nacos.naming.empty-service.clean.period-time-ms30000#--------------- 鉴权配置3.x 必须 ---------------# 认证系统类型nacos 内置 / ldapnacos.core.auth.system.type${NACOS_AUTH_SYSTEM_TYPE:nacos}# 开启鉴权nacos.core.auth.enabledtruenacos.core.auth.admin.enabledtruenacos.core.auth.console.enabledtrue# 鉴权缓存false 改了权限立即生效不用等 15 秒nacos.core.auth.caching.enabled${NACOS_AUTH_CACHE_ENABLE:false}# 节点间身份标识集群内部认证用单机也要配nacos.core.auth.server.identity.keyauthKey2026nacos.core.auth.server.identity.valueauthValue2026# Token 配置nacos.core.auth.plugin.nacos.token.cache.enablefalsenacos.core.auth.plugin.nacos.token.expire.seconds${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}# JWT 签名密钥Base64 编码≥32 字符nacos.core.auth.plugin.nacos.token.secret.keyVGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg# 忽略鉴权的 URL 路径nacos.security.ignore.urls${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}#--------------- 部署模式 ---------------# merged 控制台 服务端合并部署单机模式nacos.deployment.typemerged#--------------- 其他功能开关默认关 ---------------nacos.istio.mcp.server.enabledfalsenacos.k8s.sync.enabledfalse9. 上传 PostgreSQL 相关插件CSDN上传不了附件下源码打包或者自己找资源吧Nacos PostgreSQL Datasource Plugin Ext 3.1.0.jar、PostgreSQL 42.7.3.jar10. 启动容器并挂载目录自己根据情况调整参数dockerrun-d\--namenacos\-p8080:8080\-p8848:8848\-p9848:9848\-v/data/nacos/conf/application.properties:/home/nacos/conf/application.properties:ro\-v/data/nacos/logs:/home/nacos/logs\-v/data/nacos/data:/home/nacos/data\-v/data/nacos/plugins:/home/nacos/plugins\-eMODEstandalone\-eSERVICE_USERpostgres\-eSERVICE_PASSWORDhello2026\-eJVM_XMS256m\-eJVM_XMX256m\-eJVM_XMN128m\-eNACOS_AUTH_TOKENVGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg\-eNACOS_AUTH_IDENTITY_KEYauthKey2026\-eNACOS_AUTH_IDENTITY_VALUEauthValue2026\nacos/nacos-server:v3.1.0