首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >curl:(56) Recv失败:由同级aws lambda类型记录重置连接

curl:(56) Recv失败:由同级aws lambda类型记录重置连接
EN

Stack Overflow用户
提问于 2022-01-06 11:51:21
回答 2查看 1.1K关注 0票数 4

我有一个小应用程序(目前正在测试),我想部署到lambda。我在AWS官方指南中遵循了创建lambda容器映像的官方教程。我只将处理程序的位置更改为src/index.ts

当我运行curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'时,我得到了curl: (56) Recv failure: Connection reset by peer

Dockerfile

代码语言:javascript
复制
FROM public.ecr.aws/lambda/nodejs:14

COPY . ${LAMBDA_TASK_ROOT}

# Install NPM dependencies for function
RUN npm install
RUN npm run build

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "dist/index.handler" ]

package.json

代码语言:javascript
复制
{
  ...
  "scripts": {
    "build": "tsc",
    "start": "yarn run build && node dist/index.js",
    "lint": "eslint . --ext .ts",
    "test": "jest"
  },
  ...
  "dependencies": {
    ...
    "typescript": "^4.5.4"
  },
  "devDependencies": {
    "@types/node": "14",
    "jest": "^27.4.5"
  }
}

src/index.ts

代码语言:javascript
复制
export const handler = (event, context, callback) => {
  console.log("It ran");

  return callback(null, {
    statusCode: 200,
    message: "Hello",
    body: "Hello"
  })
}

tsconfig.json

代码语言:javascript
复制
{
  "compilerOptions": {
    "module": "commonjs",
    "esModuleInterop": true,
    "target": "es6",
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "dist",
    "declaration": true,
  },
  "lib": ["es2015"]
}

根据我的理解,AWS容器映像使用运行时-接口-模拟器。访问他们的github页面实际上没有任何关于调试的内容。无法获得日志,也无法理解运行或不运行的内容。

从这个回答看来,容器中的应用程序没有为它分配端口,但是同样,无法调试或查看日志。

当我将函数部署到aws lambda并对其进行测试时,它按预期工作:

问题

我如何调试正在发生的事情?为什么我会收到curl: (56) Recv failure: Connection reset by peer

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-06 12:51:31

问题是,在构建映像时,当容器应用程序绑定到9000时,我将端口8000映射到8080。它通过改变:

代码语言:javascript
复制
docker run -p 9000:8000 xxxx

代码语言:javascript
复制
docker run -p 9000:8080 xxxx
票数 4
EN

Stack Overflow用户

发布于 2022-03-06 12:10:41

如果在跟随接受的答案后,仍然得到错误。只需确保您没有在9000端口上运行另一个容器。

只需运行docker container ls并检查端口列是否包含另一个容器的9000。

要修复它,只需选择另一个您知道没有使用的端口,例如docker run -p 9001:8080 xxxx,然后相应地更新curl请求。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70606685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档