我有一个小应用程序(目前正在测试),我想部署到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
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
{
...
"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
export const handler = (event, context, callback) => {
console.log("It ran");
return callback(null, {
statusCode: 200,
message: "Hello",
body: "Hello"
})
}tsconfig.json
{
"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
发布于 2022-01-06 12:51:31
问题是,在构建映像时,当容器应用程序绑定到9000时,我将端口8000映射到8080。它通过改变:
docker run -p 9000:8000 xxxx至
docker run -p 9000:8080 xxxx发布于 2022-03-06 12:10:41
如果在跟随接受的答案后,仍然得到错误。只需确保您没有在9000端口上运行另一个容器。
只需运行docker container ls并检查端口列是否包含另一个容器的9000。
要修复它,只需选择另一个您知道没有使用的端口,例如docker run -p 9001:8080 xxxx,然后相应地更新curl请求。
https://stackoverflow.com/questions/70606685
复制相似问题