首页 > 解决方案 > AWS Batch:/usr/local/bin/python: 无法执行二进制文件

问题描述

我构建了一个 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。

出了什么问题?我在本地运行容器,并且可以启动脚本而不会出现任何错误。

标签: pythonamazon-web-servicesdockeraws-batch

解决方案


删除你的ENTRYPOINT行。但是将其替换为CMD说明容器实际在做什么的内容。

Docker 容器运行的主要命令有两个部分,ENTRYPOINTCMD; 当容器启动时,这些组合成一个命令。您的容器正在运行的命令可能类似于

/bin/bash python /runscript.py

因此(成功)bash找到了 a python$PATH并尝试将其作为 shell 脚本运行(导致该错误)。

严格来说,您并不需要ENTRYPOINT,这会造成麻烦。相反,你通常希望容器做一件事,所以你应该在 Dockerfile 中指定它。

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

推荐阅读