AWS Batch:/usr/local/bin/python:无法执行二进制文件

Sou*_*uad 3 python amazon-web-services docker aws-batch

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

FROM python:slim
RUN apt-get update
RUN pip install boto3 matplotlib awscli
COPY runscript.py /
ENTRYPOINT ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)

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

python /runscript.py
Run Code Online (Sandbox Code Playgroud)

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

/usr/local/bin/python: /usr/local/bin/python: cannot execute binary file
Run Code Online (Sandbox Code Playgroud)

并且该作业的状态为 FAILED。

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

Dav*_*aze 6

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

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

/bin/bash python /runscript.py
Run Code Online (Sandbox Code Playgroud)

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

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

# No ENTRYPOINT
CMD ["python", "/runscript.py"]
Run Code Online (Sandbox Code Playgroud)