docker在aws ecs中运行程序参数

cse*_*ell 14 amazon-web-services docker

我在亚马逊的ECS中有一个工作容器,它将程序作为一项任务运行.我想传递一些程序参数,就像在本地运行时一样docker run.我已经设法在ECS中的容器配置中传递一个新的入口点,就像我在docker run命令行中传递它一样.

不幸的是,当这样做时,我将覆盖已在图像中定义的内部入口点.我想使用内部入口点,只需添加一些命令行参数,比如--debug选项.有没有办法做到这一点?

提前致谢.

Rom*_*her 15

1.如果您通常将命令行参数传递给脚本,例如

python myscript.py --debug --name "joe schmoe" --quality best --dimensions 1920 1080
Run Code Online (Sandbox Code Playgroud)

2.你有一个 docker 镜像,有一个入口点来运行这个脚本,比如

FROM python:3.7-alpine

# Add the application folder to the container
COPY . /myscript
WORKDIR /myscript

# Install required packages
RUN pip install -r requirements.txt --upgrade

# Run the script when the container is invoked
ENTRYPOINT ["python", "myscript.py"]
Run Code Online (Sandbox Code Playgroud)

3.然后,当通过 aws ecs 用户界面编辑任务/容器定义时,您必须将参数放入容器设置“环境”部分下的“命令”字段中,并用逗号替换参数和值之间的所有空格,例如所以:

--debug,--name,joe schmoe,--quality,best,--dimensions,1920,1080
Run Code Online (Sandbox Code Playgroud)

带有空格的项目joe schmoe被引用为“joe schmoe”,这就是为什么像--quality best这样的东西不起作用,而是需要用逗号分隔为--quality,best

在此处输入图片说明

4、创建任务后,查看任务定义中的容器详情,命令显示为:

["--debug","--name","joe schmoe","--quality","best","--dimensions","1920","1080"]
Run Code Online (Sandbox Code Playgroud)

这与Dockerfile 中的CMD指令接受的语法相同。

在此处输入图片说明


udo*_*dan 10

在 ECS 中运行任务时,您可以指定容器覆盖

在 AWS 控制台中,这可以在“高级选项”部分的底部找到。

在此处输入图片说明

在 CLI 上,您可以传入一个带有覆盖的 JSON 对象,如下所示:

aws ecs run-task ... --overrides '{"containerOverrides": [{"name": "whatever", "command": ["foo", "bar"}]}'
Run Code Online (Sandbox Code Playgroud)

commandCMD一个获取容器内执行。

以同样的方式,环境变量可以传递给容器。以下是aws-cli 文档中描述的可能选项列表:

{
  "containerOverrides": [
    {
      "name": "string",
      "command": ["string", ...],
      "environment": [
        {
          "name": "string",
          "value": "string"
        }
        ...
      ],
      "cpu": integer,
      "memory": integer,
      "memoryReservation": integer
    }
    ...
  ],
  "taskRoleArn": "string",
  "executionRoleArn": "string"
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因name,必须在覆盖中设置始终。¯\_(?)_/¯

  • 如何在CMD od ECS中转义逗号? (2认同)

cse*_*ell -1

这很简单:命令行参数可以作为ECS 配置中的命令而不是入口点传递。

  • 我很想看到这样的例子。 (17认同)