docker 部署nacos访问首页出现404

本文分享了一个关于Nacos服务发现与配置管理平台访问路径的常见问题及解决方案。作者因为未正确输入URL路径而导致404错误,通过本文可以了解到如何避免此类错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己的问题,捣鼓了半天

  • 访问:http://ip:端口/nacos
  • 我之前这里没有加nacos 导致404,真的是醉了,希望后面的人少踩些坑

其他可能的原因

一、路径与前缀类问题

1. 反向代理把 /nacos 前缀“丢”了

  • 症状http://域名/nacos 返回 404;直接打容器 http://宿主IP:8848/nacos 正常。

  • 定位

    # 检查是否少了尾斜杠
    location /nacos {            # 容易丢前缀
      proxy_pass http://127.0.0.1:8848;  # 与上面组合会拼成 /,静态资源404
    }
    
  • 修复(两种都行)

    # 保留前缀(推荐)
    location /nacos/ {
      proxy_pass http://127.0.0.1:8848;
    }
    
    # 或去前缀
    location / {
      proxy_pass http://127.0.0.1:8848;
      sub_filter '/nacos/' '/';  # 如确需移除,注意静态资源路径
      sub_filter_once off;
    }
    

2. 缺少尾斜杠导致静态资源 404

  • 症状/nacos 能打开 HTML,但 app.jsindex.css 等 404,页面空白。

  • 修复:访问统一用 /nacos/;Nginx 里加 301:

    location = /nacos { return 301 /nacos/; }
    

3.大小写/路径拼写不一致

  • 症状/Nacos/NACOS 404(路径区分大小写)。
  • 修复:统一使用小写 /nacos/

4.K8s Ingress 未做重写

  • 症状http://域名/nacos 404;NodePort:8848/nacos 正常。

  • 修复示例(NGINX Ingress)

    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      rules:
      - http:
          paths:
          - path: /nacos(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: nacos
                port:
                  number: 8848
    

    上面把前缀 /nacos 去掉后转发到 8848,保持资源路径正确。

二、端口与映射类问题

1. 端口映射错位/被占用

  • 症状:你以为连到 Nacos,其实命中了别的服务返回 404。

  • 自检

    docker ps --format 'table {{.Names}}\t{{.Ports}}'
    sudo lsof -i :8848
    curl -I http://127.0.0.1:8848/nacos/
    
  • 修复:确认是 -p 8848:8848,避免与其他容器或宿主服务冲突。

2. 搞混 2.x 的 gRPC 端口

  • 提示:2.x 常见 9848 为 RPC 端口,不是控制台端口。控制台仍在 8848

三、服务启动与上下文配置

1. 应用尚未启动完成

  • 症状:刚启动访问 404,过一会儿正常。

  • 自检

    docker logs -f nacos | egrep -i 'Started|Tomcat|port|context'
    # 看到类似:Tomcat started on port(s): 8848 (http) with context path '/nacos'
    

2. 上下文路径被改掉了

  • 症状/nacos 404,但日志显示 context path '/' 或者 /console 等。

  • 原因:设置了 SERVER_SERVLET_CONTEXT_PATH 或配置文件里改了 server.servlet.context-path

  • 修复:统一期望

    # 默认(控制台在 /nacos)
    -e SERVER_SERVLET_CONTEXT_PATH=/nacos
    
    # 若你要放根路径(/),反向代理与静态资源路径都要跟着调
    -e SERVER_SERVLET_CONTEXT_PATH=/
    

3. 静态资源路径被自定义覆盖

  • 症状:HTML 打开但静态资源全 404。
  • 排查:是否设置了 SPRING_WEB_RESOURCES_STATIC_LOCATIONS、自改了资源目录或挂载覆盖了 /home/nacos/.../static
  • 修复:去掉该环境变量/挂载;或把静态资源放回默认路径。

四、代理/安全相关

1. 鉴权/登录跳转被代理“吃掉”

  • 症状:控制台首页 404 或白屏;网络面板有 302/401。

  • 原因:Nginx/网关拦截或剥离了 Set-Cookie/Location

  • 修复

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_cookie_path / /;   # 保留 Cookie 路径
    

2. HTTPS/HTTP 混用导致资源加载失败

  • 症状:页面加载一半、控制台报 Mixed Content,或静态资源“看起来像 404”。
  • 修复:前后端协议统一;HTTPS 反代时补齐 X-Forwarded-Proto https

3. 跨域预检被 404(走了错误的 location)

  • 症状:接口 OPTIONS 404,页面功能不可用。

  • 修复(反代层放行 OPTIONS)

    if ($request_method = OPTIONS) { return 204; }
    

五、容器镜像与挂载

1. 挂载把应用目录盖没了

  • 症状:容器里 /home/nacos/.../static 空了,导致 404。

  • 自检

    docker exec -it nacos sh -lc 'ls -l /home/nacos'
    
  • 修复:避免对应用安装目录做“目录级”挂载;需要持久化请挂数据目录或外部数据库。

2. 镜像/版本不一致

  • 症状:升级后 404;回滚正常。
  • 修复:对齐镜像与配置;查看 Release Note 是否有路径/端口变更;优先使用官方镜像。

六、网关/路由命中错误实例

Nginx:保留前缀正确写法

location /nacos/ {
  proxy_pass http://127.0.0.1:8848;  # 注意:有斜杠
  proxy_set_header Host $host;
}
location = /nacos { return 301 /nacos/; }  # 统一加尾斜杠

Nginx:去前缀的写法(谨慎)

location /nacos/ {
  proxy_pass http://127.0.0.1:8848/; # 末尾也要斜杠,表示“丢前缀”
}

K8s NGINX Ingress:带重写

annotations:
  nginx.ingress.kubernetes.io/rewrite-target: /$2
paths:
  - path: /nacos(/|$)(.*)
    pathType: Prefix

如果这篇文章对你有帮助,麻烦点个赞哦!

### 使用 Docker 部署 Nacos 的最佳实践 #### 准备工作 为了顺利部署 Nacos,需确保已安装 DockerDocker Compose。对于 Linux 用户来说,还需确认内核版本不低于 3.10。 #### 获取镜像 拉取最新的 Nacos 官方镜像是启动服务的第一步: ```bash docker pull nacos/nacos-server:latest ``` 此命令会从 Docker Hub 下载最新版的 Nacos Server 镜像[^3]。 #### 单机模式快速启动 单节点测试环境可通过如下指令迅速搭建起来: ```bash docker run --name nacos -p 8848:8848 -e MODE=standalone nacos/nacos-server ``` 这条命令指定了端口映射以及以独立模式运行 Nacos 实例[^2]。 #### 多实例集群配置 生产环境中推荐采用多副本形式提高系统的稳定性和性能表现。创建 `docker-compose.yml` 文件来定义多个 Nacos 节点组成的集群结构: ```yaml version: '3' services: nacos1: image: nacos/nacos-server container_name: nacos1 ports: - "8848" environment: - PREFER_HOST_MODE=hostname - MODE=cluster - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=db - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=root - MYSQL_SERVICE_DB_NAME=nacos_config networks: - nacoshub_network networks: nacoshub_network: ``` 上述 YAML 片段展示了如何设置第一个 Nacos 成员,并连接到外部数据库存储持久化数据。 #### 数据库初始化脚本 当选用关系型数据库作为元数据中心时,应提前准备好 SQL 初始化语句文件,以便于导入表结构及相关初始记录。通常情况下,这些资源可以在项目 GitHub 页面找到对应的建表语句文档[^1]。 #### 启动应用 完成以上准备工作之后,执行下面的命令即可让整个分布式体系生效: ```bash docker-compose up -d ``` 这一步骤将会依据之前编写的组合描述自动下载缺失依赖项并依次激活各个组件服务。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CV大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值