【发布时间】:2019-10-20 12:28:44
【问题描述】:
我有一个 Docker 容器,它在其中执行一个 python 脚本作为入口点。这是 DockerFile
FROM python:3
ADD script.py /
EXPOSE 80
RUN pip install boto3
RUN pip install uuid
ENTRYPOINT ["python","./script.py"]
这是 Python 脚本:
import boto3
import time
import uuid
import os
guid = uuid.uuid4()
timestr = time.strftime("%Y%m%d-%H%M%S")
job_index = os.environ['AWS_BATCH_JOB_ARRAY_INDEX']
filename = 'latest_test_' + str(guid) + '_.txt'
with open(filename, 'a+') as f:
data = job_index
f.write(data)
client = boto3.client(
's3',
# Hard coded strings as credentials, not recommended.
aws_access_key_id='',
aws_secret_access_key=''
)
response = client.upload_file(filename, 'api-dev-dpstorage-s3', 'docker_data' + filename + '.txt')
with open('response2.txt', 'a+') as f:
f.write('all done')
exit
它的设计目的只是为了创建一个文件,将作业数组索引写入文件并将其推送到 S3 Bucket。 AWS Batch 的作业数组索引来自预定义的环境变量之一。我已将图像上传到 AWS ECR,并设置了一个 AWS Batch 来运行一个包含 10 个数组的作业。这应该执行该作业 10 次,我希望将 10 个文件转储到 S3 中,每个文件都包含数组索引工作本身。
如果我不包含环境变量,而只是将值硬编码到文本文件中,则 AWS Batch 作业可以工作。如果我包含对 os.environ 的调用以获取变量,则作业将失败并出现此 AWS Batch 错误:
Status reasonEssential container in task exited
我假设我尝试获取环境变量的方式存在问题。有谁知道我如何正确引用其中一个内置环境变量和/或作业中定义的自定义环境变量?
【问题讨论】: