You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Postman本地测试Docker内的Serverless Offline接口

问题描述

我的环境配置如下:
我后端采用基于Node.js的Serverless Framework,当前尝试构建Docker镜像,通过serverless-offline插件在本地运行Serverless服务。

Docker配置

FROM public.ecr.aws/lambda/nodejs:10

# Set the working directory of the docker image 
WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install

COPY . .
EXPOSE 3001

ENTRYPOINT [ "./node_modules/serverless/bin/serverless", "offline", "start", "--port", "3001", "--stage", "prerelease","--host", "0.0.0.0", "--noauth" ]
CMD ["lib/functions/generateDoc/index.handler"]

执行命令 docker run -p 3001:3001 -it docdownload 后,控制台输出如下:

Serverless: Starting Offline: prerelease/us-west-2.


Serverless: Routes for generateDoc:

Serverless: POST /exportDoc

Serverless: WARNING: Serverless Offline does not support non local authorizers (authorizerId): [object Object]

Serverless: POST /{apiVersion}/functions/doc-api-prerelease-generateDoc/invocations


Serverless: Offline [HTTP] listening on http://localhost:3001

Serverless: Enter "rp" to replay the last request

从日志可见服务已在3001端口监听,生成了POST /exportDoc路由,但我使用Postman发起接口请求时出现访问异常:
接口异常截图

请问如何正确通过Postman本地测试该Docker容器中运行的服务接口?


回答

问题根因

容器内的serverless-offline服务默认绑定了容器内部的127.0.0.1地址,没有正确监听0.0.0.0,导致宿主机无法通过映射的端口访问服务。核心原因是Dockerfile中ENTRYPOINT和CMD的组合写法错误,多余的handler路径参数打乱了启动参数解析,--host 0.0.0.0和--noauth参数均未生效。

解决步骤

  • 修改Dockerfile配置
    去掉CMD中多余的handler路径参数,该参数是serverless.yml中配置的函数入口,不需要在启动命令末尾追加。修改后的启动配置如下:
    FROM public.ecr.aws/lambda/nodejs:10
    
    # Set the working directory of the docker image 
    WORKDIR /usr/src/app
    
    COPY package*.json ./
    RUN npm install
    
    COPY . .
    EXPOSE 3001
    
    # 如需仅启动generateDoc单个函数,可在参数中追加 --function generateDoc
    ENTRYPOINT [ "./node_modules/serverless/bin/serverless", "offline", "start", "--port", "3001", "--stage", "prerelease","--host", "0.0.0.0", "--noauth" ]
    CMD []
    
  • 重新构建镜像
    在Dockerfile所在目录执行命令:
    docker build -t docdownload .
    
  • 启动容器
    执行端口映射启动命令:
    docker run -p 3001:3001 -d docdownload
    
    启动后查看容器日志,确认监听地址显示为http://0.0.0.0:3001即代表绑定正确,之前的非本地authorizer警告不影响--noauth参数生效,可直接忽略。
  • Postman请求配置
    • 请求方法选择POST
    • 请求地址填写http://localhost:3001/exportDoc
    • 无需配置任何鉴权相关请求头
    • 若接口需要JSON格式入参,在Body栏选择raw格式,右侧下拉选JSON,填入对应请求参数即可发起调用。

连通性排查

如果按上述步骤配置后仍无法访问,先在宿主机执行以下命令验证端口连通性:

curl -v http://localhost:3001/exportDoc
  • 如果提示连接拒绝,回到容器日志确认监听地址是否为0.0.0.0,同时检查本机3001端口是否被其他进程占用
  • 如果返回404,核对日志中打印的路由列表,确认/exportDoc路由是否正确注册

内容的提问来源于stack exchange,提问作者vam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:57:27