Docker 安装 Nacos v1.4.4 踩坑实录

Docker 安装 Nacos v1.4.4 踩坑实录

背景

在 Linux 环境下使用 Docker 部署 Nacos v1.4.4 单机模式时,容器虽然创建成功,但服务实际并未正常启动,访问 Web 控制台无响应。本文记录了完整的安装过程及问题排查解决步骤。

环境信息

  • 操作系统:Linux (Ubuntu)
  • Nacos 版本:v1.4.4
  • 部署方式:Docker standalone 模式

初始安装命令

按照常规方式执行以下命令:

bash 复制代码
docker run -d \
  --name nacos \
  --restart=always \
  -p 8848:8848 \
  -e MODE=standalone \
  -v /data/nacos/init.d:/home/nacos/init.d \
  -v /data/nacos/logs:/home/nacos/logs \
  nacos/nacos-server:v1.4.4

容器启动了,但访问 http://<IP>:8848/nacos 无任何响应。

问题排查

通过 docker logs nacos --tail 100 查看容器日志,发现关键报错:

arduino 复制代码
Failed to bind properties under 'server.tomcat.basedir' to java.io.File:

根因分析 :nacos/nacos-server:v1.4.4 镜像内置的 application.properties 配置文件中,server.tomcat.basedir 的值为空字符串,而 Spring Boot 无法将空字符串转换为 java.io.File 类型,导致 Tomcat 启动失败,Nacos 服务随之无法运行。

解决方案

第一步:从镜像中提取配置文件

bash 复制代码
# 创建临时容器
docker create --name nacos-temp nacos/nacos-server:v1.4.4

# 将配置文件拷贝到宿主机
docker cp nacos-temp:/home/nacos/conf/application.properties /data/nacos/application.properties

# 删除临时容器
docker rm nacos-temp

第二步:修复配置文件

查看问题所在:

bash 复制代码
grep "tomcat.basedir" /data/nacos/application.properties
# 输出: server.tomcat.basedir=

将空值替换为有效路径:

bash 复制代码
sed -i 's|server.tomcat.basedir=|server.tomcat.basedir=/home/nacos/data/tomcat|' /data/nacos/application.properties

验证修改结果:

bash 复制代码
grep "tomcat.basedir" /data/nacos/application.properties
# 输出: server.tomcat.basedir=/home/nacos/data/tomcat

第三步:删除旧容器,用修复后的配置重新创建

bash 复制代码
# 停止并删除旧容器
docker stop nacos && docker rm nacos

# 确保数据目录存在
mkdir -p /data/nacos/init.d /data/nacos/logs

# 重新创建容器,额外挂载修复后的配置文件
docker run -d \
  --name nacos \
  --restart=always \
  -p 8848:8848 \
  -e MODE=standalone \
  -v /data/nacos/application.properties:/home/nacos/conf/application.properties \
  -v /data/nacos/init.d:/home/nacos/init.d \
  -v /data/nacos/logs:/home/nacos/logs \
  nacos/nacos-server:v1.4.4

第四步:验证启动

等待约 20 秒后查看日志:

bash 复制代码
docker logs nacos --tail 20

看到以下输出即表示启动成功:

scss 复制代码
Nacos started successfully in stand alone mode. use embedded storage
Tomcat started on port(s): 8848 (http) with context path '/nacos'

访问信息

  • 控制台地址http://<服务器IP>:8848/nacos
  • 默认账号:nacos
  • 默认密码:nacos

目录结构

bash 复制代码
/data/nacos/
├── application.properties   # Nacos 配置文件(已修复)
├── init.d/                  # 自定义初始化脚本目录
└── logs/                    # Nacos 运行日志目录

总结

nacos/nacos-server:v1.4.4 镜像存在一个已知缺陷:application.propertiesserver.tomcat.basedir 配置项值为空,导致在某些环境下 Tomcat 无法初始化。解决方案是从容器中提取配置文件,补全该配置项的值,然后以挂载方式覆盖容器内原有配置文件,即可正常启动。

相关推荐
对象存储与RustFS几秒前
RustFS 后台扫描器与自愈调参:五档速度、位腐检测周期与并发上限
后端·rust·开源
天天喝旺仔11 分钟前
Docker 镜像瘦身实战:多阶段构建把体积缩小 90%
运维·后端·ci/cd·docker·云原生·容器·性能优化
Lost of 程序猿15 分钟前
ASP.NET Core Saga 分布式事务深度实战:备件采购跨服务长流程,如何保证“要么全成,要么全回“
分布式·后端·asp.net
卷无止境18 分钟前
Coding Agent 里的上下文 Compact,到底在压缩什么
后端·python
爱勇宝24 分钟前
公司没给活干,却因为员工看手机把人开了:法院判赔11万元
前端·后端·程序员
2601_9620710029 分钟前
【Java EE】SpringBoot的创建与简单使用
spring boot·后端·java-ee
Csvn31 分钟前
🐍 Day 7:文件 I/O 实战
后端
Supersist44 分钟前
【Spring】 BeanFactory 和 ApplicationContext 体系结构
后端·spring
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 9 章 使用 WebMvc 开发进阶 阅读笔记 24
spring boot·笔记·后端
yunwei371 小时前
AgentCgroup:当 AI Agent 遇到操作系统资源
linux·人工智能·后端