创建AWS Lambda R脚本部署包时遇到执行错误
解决AWS Lambda部署R脚本时的Docker容器启动错误
问题场景
尝试将R脚本handler.R部署到AWS Lambda,已创建bootstrap脚本和Dockerfile,构建镜像后验证文件位置及权限均正常,但执行创建部署包的命令时出现以下错误:
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./bootstrap": stat ./bootstrap: no such file or directory: unknown.
错误原因
执行复制命令时使用了-v "${PWD}/dist:/var/task"参数,将本地dist目录挂载到容器的/var/task路径,这会覆盖容器内原有的/var/task目录——原本存在的bootstrap和handler.R会被本地空的dist目录替换,导致容器启动时找不到指定的bootstrap入口文件。
解决方案
方案1:挂载到容器内非/var/task的目录
修改挂载路径,将本地dist挂载到容器的其他目录(比如/local-dist),再从容器原/var/task复制文件到该挂载目录:
mkdir dist docker run --rm -v "${PWD}/dist:/local-dist" my-r-image sh -c "cp /var/task/bootstrap /var/task/handler.R /local-dist/"
方案2:临时覆盖镜像的ENTRYPOINT
直接指定容器启动时执行sh而非默认的bootstrap,避免触发找不到文件的错误:
mkdir dist docker run --rm -v "${PWD}/dist:/var/task/dist" --entrypoint sh my-r-image -c "cp /var/task/bootstrap /var/task/handler.R /var/task/dist/"
方案3:直接本地复制(最简便)
如果bootstrap和handler.R文件就在本地工作目录,无需通过容器,直接复制到dist目录即可:
mkdir dist cp bootstrap handler.R dist/
额外提示
打包Lambda部署包时,需确保bootstrap文件的可执行权限被保留(可以用zip -r lambda-package.zip dist/*命令打包,避免权限丢失)。
内容的提问来源于stack exchange,提问作者Emonale
相关产品推荐
相关产品推荐

