简介:本文详细介绍如何使用 Docker Compose 快速部署单机版 Nacos,涵盖环境准备、配置优化、验证测试及常见问题解决方案,适合开发者和运维人员快速上手。
Nacos 作为阿里巴巴开源的动态服务发现、配置和服务管理平台,在微服务架构中扮演着核心角色。单机版部署适用于开发测试环境或小型项目,具有资源占用低、部署简单的特点。而 Docker Compose 通过一个 YAML 文件即可定义和管理多容器应用,极大简化了部署流程。相比手动安装,Docker Compose 的优势体现在:
docker version 验证)。docker compose version 验证)。以 Ubuntu 为例:
# 安装 Dockersudo apt updatesudo apt install -y docker.iosudo systemctl enable --now docker# 添加当前用户到 docker 组(避免每次使用 sudo)sudo usermod -aG docker $USERnewgrp docker # 立即生效# 安装 Docker Compose V2mkdir -p ~/.docker/cli-plugins/curl -SL https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-composechmod +x ~/.docker/cli-plugins/docker-compose
验证安装:
docker run hello-world # 测试 Dockerdocker compose version # 测试 Docker Compose
mkdir -p ~/nacos-docker && cd ~/nacos-docker
version: '3.8'services:nacos:image: nacos/nacos-server:v2.3.2 # 使用官方最新稳定版镜像container_name: nacos-standaloneenvironment:- MODE=standalone # 设置为单机模式- PREFER_HOST_MODE=hostname # 优先使用主机名(避免 IP 变化问题)- JVM_XMS=512m # 初始堆内存- JVM_XMX=512m # 最大堆内存- JVM_XMN=256m # 新生代内存ports:- "8848:8848" # Nacos 默认端口- "9848:9848" # 集群通信端口(单机版无需但保留)volumes:- ./nacos-data:/home/nacos/data # 数据持久化- ./nacos-logs:/home/nacos/logs # 日志持久化restart: unless-stoppedhealthcheck:test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/ns/health"]interval: 30stimeout: 10sretries: 3
nacos/nacos-server 镜像,版本建议选择最新的稳定版(如 v2.3.2)。volumes 映射本地目录,防止容器重启后数据丢失。
docker compose up -d # 后台启动
启动后验证:
docker compose logs -f # 查看实时日志curl http://localhost:8848/nacos/v1/ns/health # 检查健康状态
浏览器打开 http://localhost:8848/nacos,默认用户名/密码为 nacos/nacos。
// Spring Cloud 示例(pom.xml 需引入 nacos-discovery 依赖)@SpringBootApplication@EnableDiscoveryClientpublic class TestService {public static void main(String[] args) {SpringApplication.run(TestService.class, args);}}// application.yml 配置spring:application:name: test-servicecloud:nacos:discovery:server-addr: 127.0.0.1:8848
在 Nacos 控制台的「服务管理」→「服务列表」中应能看到 test-service。
在控制台的「配置管理」→「配置列表」中新建配置:
test-configDEFAULT_GROUPYAML
app:name: test-appversion: 1.0.0
@RestControllerpublic class ConfigController {@Value("${app.name}")private String appName;@GetMapping("/config")public String getConfig() {return appName;}}
访问 http://localhost:8080/config(需确保 Spring Boot 端口为 8080)应返回 test-app。
问题:8848 端口被占用。
解决:修改 docker-compose.yml 中的 ports 映射,例如:
ports:- "18848:8848" # 将宿主机端口改为 18848
问题:容器因 OOM(Out of Memory)崩溃。
解决:调整 JVM 参数或增加服务器内存:
environment:- JVM_XMS=1024m- JVM_XMX=1024m
问题:重启后配置丢失。
解决:检查 volumes 映射的本地目录权限:
sudo chown -R 1000:1000 ~/nacos-docker/nacos-data # Nacos 容器默认用户 UID 为 1000
问题:healthcheck 持续失败。
解决:检查 Nacos 是否真正启动:
docker compose exec nacos bash -c "ps aux | grep java" # 查看 Java 进程
deploy.resources 限制容器资源:
deploy:resources:limits:cpus: '1.0'memory: 1G
nacos-data 目录。通过 Docker Compose 部署单机版 Nacos,开发者可以在 5 分钟内完成从环境准备到服务验证的全流程。本文提供的 YAML 配置已覆盖关键参数,并针对常见问题给出了解决方案。对于开发测试环境,此方案可显著提升效率;对于小型生产环境,通过适当的资源限制和备份策略,亦可稳定运行。
下一步建议:
MODE=cluster 并配置 nacos.standalone=false)。