python - 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。
出了什么问题?我在本地运行容器,并且可以启动脚本而不会出现任何错误。
解决方案
删除你的ENTRYPOINT
行。但是将其替换为CMD
说明容器实际在做什么的内容。
Docker 容器运行的主要命令有两个部分,ENTRYPOINT
和CMD
; 当容器启动时,这些组合成一个命令。您的容器正在运行的命令可能类似于
/bin/bash python /runscript.py
因此(成功)bash
找到了 a python
,$PATH
并尝试将其作为 shell 脚本运行(导致该错误)。
严格来说,您并不需要ENTRYPOINT
,这会造成麻烦。相反,你通常希望容器做一件事,所以你应该在 Dockerfile 中指定它。
# No ENTRYPOINT
CMD ["python", "/runscript.py"]
推荐阅读
- swift - ORSSerialPort.send 不发送任何内容
- javascript - 如何在 x 轴上设置 max/min 以在 Chart.js 中显示时间范围?
- php - 关于服务器日期和 laravel cron 作业的问题
- azure - SQL Server 数据库表到 REST Web 服务
- swift - Xcode 11:使用 XCUIElement waitForExistence 时出现 _XCTestCaseInterruptionException
- deep-learning - 将 word2vec 嵌入传递给自定义 LSTM pytorch 模型
- c# - 我如何编写一个 Android 应用程序来获得某种独特的价值?
- hadoop - Hadoop (MapReduce) 的问题。不要为这个错误工作
- javascript - 第二张图片的 onclick 应该变为活动状态(即进行 next() 调用)
- python - pd.merge_asof 每个时间段有多个匹配项?