AWS Batch:/usr/local/bin/python:无法执行二进制文件
AWS Batch:/usr/local/bin/python: cannot execute binary file
我构建了一个 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
;当容器启动时,这些是 combined together into one command。您的容器是 运行ning 的命令可能类似于
/bin/bash python /runscript.py
因此 bash
在其 $PATH
中找到一个 python
(成功),并尝试将其 运行 作为 shell 脚本(导致错误)。
严格来说,您不需要 ENTRYPOINT
,这会造成麻烦。相反,您通常希望容器做一件事,因此您应该在 Docker 文件中指定它。
# No ENTRYPOINT
CMD ["python", "/runscript.py"]
您可以尝试使用以下 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'
]
}
)
我构建了一个 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
;当容器启动时,这些是 combined together into one command。您的容器是 运行ning 的命令可能类似于
/bin/bash python /runscript.py
因此 bash
在其 $PATH
中找到一个 python
(成功),并尝试将其 运行 作为 shell 脚本(导致错误)。
严格来说,您不需要 ENTRYPOINT
,这会造成麻烦。相反,您通常希望容器做一件事,因此您应该在 Docker 文件中指定它。
# No ENTRYPOINT
CMD ["python", "/runscript.py"]
您可以尝试使用以下 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'
]
}
)