gpt4 book ai didi

amazon-web-services - 无法在 Docker 下运行 AWS SAM CLI

转载 作者:行者123 更新时间:2023-12-02 01:00:50 28 4
gpt4 key购买 nike

我正在尝试为 AWS SAM CLI 创建一个 Docker 镜像,但调用任何函数都会出现错误:“无法导入模块‘index’”。我可以在 Docker 之外成功运行相同的测试用例。您可以克隆测试用例 here或查看以下文件。

我已经尝试过以下方法:

  • 将文件和父文件夹的权限设置为 777(或 755)。
  • 在 Docker 守护进程中禁用 SELinux(或启用它)。
  • 在特权模式(或非特权模式)下运行 Docker。
  • 我在使用旧的 (SAM 0.22) Docker image 时遇到了同样的错误.
  • 如下所述在本地运行相同的功能(有效)。
  • 压缩文件夹并在 AWS 上运行(有效)。

这些解决方案可能不适用:

  • zip 文件的格式不正确,包括父文件夹(未使用 zip 文件)。
  • 与 NPM 依赖项或 node_modules 相关的问题(index.js 没有依赖项)。
  • index.js 中的编译错误(语法正确,可在 Docker 外部和 AWS 上运行)。
  • 正在按照描述将卷安装到主机上 here .

docker 文件

FROM alpine:3.6
WORKDIR /usr/src/app
RUN apk add --no-cache py-pip
RUN pip install --no-cache-dir aws-sam-cli

事件.json

{}

索引.js

exports.handler = function(event, context, callback) {
return callback(null, {
'body': 'Hello, World!'
});
};

模板.yml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
HelloWorld:
Type: AWS::Serverless::Function
Properties:
FunctionName: HelloWorld
CodeUri: .
Handler: index.handler
Runtime: nodejs6.10
Timeout: 300

在本地运行 SAM:

sam local invoke -t template.yml -e event.json HelloWorld

在本地运行 SAM 成功:

{"body":"Hello, World!"}

在 Docker 下运行 SAM:

docker build -t hello .
docker run \
-v $(pwd):/usr/src/app \
-v /var/run/docker.sock:/var/run/docker.sock \
hello sam local invoke -t template.yml -e event.json HelloWorld

在 Docker 下运行 SAM 失败:

Unable to import module 'index': Error
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)

操作系统:Ubuntu 16.04.1 x86_64

Docker 版本:18.03.1-ce

SAM CLI 版本:0.3.0

最佳答案

您必须引用相对于您的主机硬盘驱动器的目录,而不是第一个 docker 容器驱动器树。

要使用 SAM cli 执行此操作,请在 上使用选项 --docker-volume-basedir "$PWD"(或 -v "$PWD")山姆本地调用

From: sam local invoke --help

--docker-volume-basedir value, -v value Optional. Specifies the location basedir where the SAM file exists. If the Docker is running on a remote machine, you must mount the path where the SAM file exists on the docker machine and modify this value to match the remote machine. [$SAM_DOCKER_VOLUME_BASEDIR]

使用上述设置,在 docker 下运行 SAM:

docker build -t hello .
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
hello sam local invoke -t template.yml -e event.json HelloWorld -v $(pwd)

关于amazon-web-services - 无法在 Docker 下运行 AWS SAM CLI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50632405/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com