【问题标题】:Pass arguments to Python running in Docker container on AWS Fargate将参数传递给在 AWS Fargate 上的 Docker 容器中运行的 Python
【发布时间】:2019-12-28 01:11:01
【问题描述】:

可以像这样向运行 Python 脚本的 Docker 容器传递参数

docker run my_script:0.1 --arg1 val --arg2 val ...

在 AWS Fargate 上运行容器时,我似乎无法弄清楚如何传递这些参数(也许它不起作用?)

【问题讨论】:

    标签: python amazon-web-services docker aws-fargate


    【解决方案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 日志中看到输出。

    【讨论】:

      【解决方案2】:

      您可以在 ECS 任务定义中使用container definitions parameters 来传递运行时参数。

      Command 参数映射到 docker run 中的 COMMAND 参数。

      "command": [
        "--arg1",
        "val",
        "--arg2",
        "val"
      ],
      

      也可以将参数作为环境变量传递。

      "environment": [
        {
          "name": "LOG_LEVEL",
          "value": "debug"
        }
      ],
      
      

      【讨论】:

      • 谢谢,@vikyol。这就是在任务定义 JSON 中指定参数的方式。如果您想在 AWS 控制台中指定这些参数,请在提示符中输入 --arg1,val,--arg2,valcommand 旁边)。
      猜你喜欢
      • 2020-11-02
      • 2018-02-25
      • 2023-02-02
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2022-01-17
      相关资源
      最近更新 更多