可以像这样将参数传递给运行Python脚本的Docker容器
docker run my_script:0.1 --arg1 val --arg2 val ...
我似乎无法弄清楚在AWS Fargate上运行容器时如何传递这些参数(也许不起作用?)
答案 0 :(得分:1)
您可以在ECS任务定义中使用container definitions parameters来传递运行时参数。
Command 参数映射到docker run中的COMMAND参数。
"command": [
"--arg1",
"val",
"--arg2",
"val"
],
也可以将参数作为环境变量传递。
"environment": [
{
"name": "LOG_LEVEL",
"value": "debug"
}
],
答案 1 :(得分:1)
在ecs中,您将容器作为任务运行。因此,您将首先注册包含容器定义的任务,然后可以运行将参数作为环境变量传递的任务。
这是示例任务定义:
myscript-task.json :(示例任务定义)
{
"containerDefinitions": [
{
"name": "myscript",
"image": "12345123456.dkr.ecr.us-west-2.amazonaws.com/myscript:0.1",
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group" : "/ecs/fargate",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "myscript"
}
}
}
],
"family": "myscript",
"networkMode": "awsvpc",
"executionRoleArn": "arn:aws:iam::12345123456:role/ecsTaskExecutionRole",
"cpu": "256",
"memory": "512",
"requiresCompatibilities": [
"FARGATE"
]
}
您将在控制台中或使用register-task-definition命令注册任务:
aws ecs register-task-definition --cli-input-json file://myscript-task.json
您现在可以使用ecs run-task命令运行任务。使用overrides参数,您将能够以不同的值运行同一任务。
aws ecs run-task --cluster testCluster --launch-type FARGATE --task-definition myscript:1 --network-configuration 'awsvpcConfiguration={subnets=[subnet-0abcdec237054abc],assignPublicIp=ENABLED}' --overrides file://overrides.json
Overrides.json示例:
{
"containerOverrides": [{
"name": "myscript",
"environment": [{
"name": "VAR1",
"value": "valueOfVar1"
}]
}]
}
现在,您可以在python脚本中访问变量。
Python脚本(样本)打印传递的环境变量。
import os
print(os.environ['VAR1'])
配置了日志驱动程序后,您将能够在cloudwatch日志中查看输出。