【问题标题】:AWS Batch:/usr/local/bin/python: cannot execute binary fileAWS Batch:/usr/local/bin/python: 无法执行二进制文件
【发布时间】:2020-04-21 01:01:33
【问题描述】:

我构建了一个 AWS Batch 计算环境。我想在作业中运行 python 脚本。 这是我正在使用的 docker 文件:

FROM python:slim
RUN apt-get update
RUN pip install boto3 matplotlib awscli
COPY runscript.py /
ENTRYPOINT ["/bin/bash"]

我的任务定义中的命令是:

python /runscript.py

当我在 AWS 控制台中提交作业时,我在 CloudWatch 中收到此错误:

/usr/local/bin/python: /usr/local/bin/python: cannot execute binary file

作业的状态为 FAILED。

出了什么问题?我在本地运行容器,我可以毫无错误地启动脚本。

【问题讨论】:

  • 你的python文件有shebang吗?
  • 不!是强制性的吗?$
  • 没有。但是如果PATH 设置不正确,那么您可以插入一个shebang 来通知解释器在哪里可以找到二进制文件。您的本地 python 可能与容器内部的位置不同。
  • @samthegolden shebang line 在这里无济于事。事实上,由于 OP 显式调用了 python 二进制文件,因此忽略了 shebang 行。

标签: python amazon-web-services docker aws-batch


【解决方案1】:

您可以尝试使用以下 docker 文件和任务定义。

Docker 文件

FROM python:slim
RUN apt-get update
RUN pip install boto3 matplotlib awscli
COPY runscript.py /
CMD ["/bin/python"]

任务定义

['/runscript.py']

通过在任务定义中传递脚本名称,您可以灵活地在提交作业时运行任何脚本。请参考以下示例提交作业并覆盖任务定义。


import boto3
session = boto3.Session()
batch_client = session.client('batch')

response = batch_client.submit_job(
            jobName=job_name,
            jobQueue=AWS_BATCH_JOB_QUEUE,
            jobDefinition=AWS_BATCH_JOB_DEFINITION,
            containerOverrides={
                'command': [
                    '/main.py'
                ]
            }
        )

【讨论】:

    【解决方案2】:

    删除您的ENTRYPOINT 行。但将其替换为CMD,它说明容器实际在做什么。

    Docker容器运行的主要命令有两个部分,ENTRYPOINT和CMD;这些是容器启动时的combined together into one command。您的容器正在运行的命令可能类似于

    /bin/bash python /runscript.py
    

    所以bash 在其$PATH 中找到python(成功),并尝试将其作为shell 脚本运行(导致该错误)。

    严格来说,您并不需要ENTRYPOINT,但这会造成麻烦。相反,您通常希望容器执行一件事,因此您只需在 Dockerfile 中指定它即可。

    # No ENTRYPOINT
    CMD ["python", "/runscript.py"]
    

    【讨论】:

    • 我试过你提供的这个解决方案,我得到了这个错误:standard_init_linux.go:190: exec user process caused "exec format error"
    • 只是一个问题,如果我通过CMD调用dockerfile中的脚本,那么我在作业定义命令中调用了什么?
    • "command" isn't required 你可以忽略它。
    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2021-09-28
    • 2023-03-05
    相关资源
    最近更新 更多