繁体   English   中英

从 Windows(本地)或 Linux(AWS EC2)构建容器有不同的效果

[英]Building container from Windows (local) or Linux (AWS EC2) has different effects

我一直在玩 AWS Batch,我无法理解为什么当我从本地 windows 机器构建 docker 图像并将其推送到 ECR 时一切正常,而当我从 ubuntu EC2 执行此操作时它不起作用实例。 我在下面展示的内容改编自本教程

docker 文件非常简单:

FROM python:3.6.10-alpine
RUN apk add --no-cache --upgrade bash
COPY ./ /usr/local/aws_batch_tutorial
RUN pip3 install -r /usr/local/aws_batch_tutorial/requirements.txt
WORKDIR /usr/local/aws_batch_tutorial

其中本地文件夹包含以下 bash 脚本 ( run_job.sh ):

#!/bin/bash

error_exit () {
  echo "${BASENAME} - ${1}" >&2
  exit 1
}

################################################################################
###### Convert envinronment variables to command line arguments ########

pat="--([^ ]+).+"
arg_list=""
while IFS= read -r line; do
    # Check if line contains a command line argument
    if [[ $line =~ $pat ]]; then
      E=${BASH_REMATCH[1]}
      # Check that a matching environmental variable is declared
      if [[ ! ${!E} == "" ]]; then
        # Make sure argument isn't already include in argument list
        if [[ ! ${arg_list} =~ "--${E}=" ]]; then
          # Add to argument list
          arg_list="${arg_list} --${E}=${!E}"
        fi
      fi
    fi
done < <(python3 script.py --help)

################################################################################
python3 -u script.py ${arg_list} | tee "${save_name}.txt"

aws s3 cp "./${save_name}.p" "s3://bucket/${save_name}.p" || error_exit "Failed to upload results to s3 bucket."
aws s3 cp "./${save_name}.txt" "s3://bucket/logs/${save_name}.txt" || error_exit "Failed to upload logs to s3 bucket."

它还包含一个包含三个包( awscliboto3botocore )的requirement.txt文件,以及一个虚拟 python 脚本( script.py ),该脚本仅列出 s3 存储桶中的文件并将列表保存在一个文件中,然后上传到 s3。

在我的本地 windows 环境和 EC2 实例中,我都使用aws configure设置了我的 AWS 凭证,在这两种情况下,我都可以成功构建图像、标记它并将其推送到 ECR。 当我在 AWS Batch 上提交作业时出现问题,它应该使用命令["./run_job.sh"]运行 ECR 容器:

  • 如果 AWS Batch 使用从 windows 推送的 ECR 图像,一切正常
  • 如果它使用从 ec2 linux 推送的图像,则作业失败,我能得到的唯一信息是:

状态原因:任务启动失败

我想知道是否有人知道可能导致错误的原因。

我想我解决了这个问题。 docker 图像中的run_job.sh脚本必须具有执行权限才能由 AWS Batch 运行(但我认为这通常是正确的)。 出于某种原因,当从 Windows 构建图像时,脚本具有此权限,但当从 linux(aws ec2 - ubuntu 实例)构建图像时则没有。 我通过在 Dockerfile 中添加以下行解决了这个问题:

 RUN chmod u+x run_job.sh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM