【问题标题】:AWS Lambda: Using container image but still getting program path not foundAWS Lambda:使用容器映像但仍然找不到程序路径
【发布时间】:2021-08-20 06:20:49
【问题描述】:

我已将 AWS Lambda 函数配置为使用容器映像。我已经构建了图像并将其上传到 ECR 中,并使用此图像运行 lambda 函数。 我仍然面临错误:

[ERROR] PortScannerError: 'nmap program was not found in path. PATH is : /var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin'
Traceback (most recent call last):
  File "/var/lang/lib/python3.8/imp.py", line 234, in load_module
    return load_source(name, filename, file)
  File "/var/lang/lib/python3.8/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 702, in _load
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 843, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/var/task/app.py", line 36, in <module>
    nmScan = nmap.PortScanner()
  File "/var/task/nmap/nmap.py", line 132, in __init__
    raise PortScannerError(

当我从容器手动运行脚本时,它运行良好。当 lambda 执行此操作时,我收到上述错误。

使用此示例 Dockerfile 结构创建 Dockerfile:

FROM public.ecr.aws/lambda/python:3.8

# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT}

# Install the function's dependencies using file requirements.txt
# from your project folder.

COPY requirements.txt  .
RUN  pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"
RUN  yum install -y nmap

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

Do I need to specify the ENTRYPOINT?

【问题讨论】:

  • 您能解释一下您是如何准备函数容器的吗?换句话说,谁能重现这个问题?
  • 我使用来自亚马逊的 python3.8 镜像创建了 Dockerfile。创建了一个名为 app.py 的文件并将我的代码添加到其中,创建了包含 python-nmap 并请求由 pip3 安装的 requirements.txt 文件。另外,我正在使用 yum install namp 命令安装 nmap,最后构建映像。
  • 当我使用此映像运行容器并将其连接到该容器时,我能够运行脚本而不会出现任何错误。此错误仅在通过 lambda 函数运行时出现。
  • 我用这个:FROM public.ecr.aws/lambda/python:3.8 # Copy function code COPY app.py ${LAMBDA_TASK_ROOT} # Install the function's dependencies using file requirements.txt # from your project folder. COPY requirements.txt . RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}" # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "app.handler" ] 我需要更改 CMD 文件吗?
  • 只需使用额外信息编辑您的问题。

标签: python amazon-web-services aws-lambda containers


【解决方案1】:

最后,它对我有用。

在 Lambda 函数中,我们可以覆盖 ENTRYPOINT、CMD 和 WORKDIR 的值。

所以,我通过传递 ENTRYPOINT、CMD 和 WORKDIR 进行了覆盖(对于 AWS Lambda,它默认为 /var/task)。

【讨论】:

  • 你是怎么做到的?步骤是什么?
  • 正如我所提到的,我从 lambda 函数中覆盖了 Entrypoint、CMD 和 WorkDir 值,它适用于它。当我手动连接到 docker 映像并运行查询时它正在工作,但是在通过 Lambda 运行它时出现了一些问题。
  • @Rukender 您为 ENTRYPOINT、CMD 和 WORKDIR 传递了哪些值。我面临同样的问题。我已经使用与您相同的 dockerfile 构建了 Lambda 容器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 2018-02-02
  • 2021-09-06
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 2022-09-28
相关资源
最近更新 更多