【问题标题】:ECS Task Definition - When overriding ENTRYPOINT, Docker image's CMD is droppedECS 任务定义 - 覆盖 ENTRYPOINT 时,Docker 映像的 CMD 被丢弃
【发布时间】:2022-04-26 21:42:05
【问题描述】:

我有一个使用以下 CMD 构建的 Docker 映像

# Dockerfile
...
CMD ["nginx", "-g", "daemon off;"]

当我的任务定义不包含entryPointcommand 时,任务成功进入运行状态。

{
  "containerDefinitions": [
    {
      "image": "<myregistry>/<image>",
      ...
    }
  ]
}

我需要在此容器的某些实例中运行代理,因此我使用entrypoint 来执行此任务来运行我的代理。问题是当我在任务定义中添加entryPoint 参数时,容器启动并立即停止。

这就是我添加entryPoint的方法:

{
  "containerDefinitions": [
    {
      "image": "<myregistry>/<image>",
      ...
      "entryPoint": [
        "custom-entry-point.sh"
      ],
    }
  ]
}

这是custom-entry-point.sh的内容:

#!/bin/bash
/myagent &
echo "CMD is: $@"
exec "$@"

为了证实我怀疑 CMD 已被删除,日志仅显示:

CMD is: 

如果我使用 command 参数将 Dockerfile 中的 CMD 数组添加到任务定义中,它可以正常工作并且任务开始:

{
  "containerDefinitions": [
    {
      "image": "<myregistry>/<image>",
      ...
      "entryPoint": [
        "custom-entry-point.sh"
      ],
      "command": [
        "nginx",
        "-g",
        "daemon off;"
    }
  ]
}

日志显示预期:

CMD is: nginx -g daemon off;

我有许多带有CMD 各种迭代的 docker 图像,我不想将它们复制到我的任务定义中。似乎只在任务定义中添加 only entryPoint 不应使用空值覆盖 docker 映像的 CMD

希望一些 ECS / fargate 专家可以帮助阐明前进的道路。

【问题讨论】:

  • 你找到答案了吗?

标签: amazon-ecs aws-fargate


【解决方案1】:

一些提示:

  1. 检查您的入口点脚本是否可执行
  2. 使用入口点脚本的绝对路径
  3. 检查日志以查看错误。希望您自动配置了 awslog 驱动程序?
  4. 您是否在本地成功运行了入口点版本?

还可以阅读本文以了解一些有用的背景: https://aws.amazon.com/blogs/opensource/demystifying-entrypoint-cmd-docker/

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我的入口点和命令属性类似于sh -c ...。我需要删除sh -c,直接输入命令,然后在我的脚本顶部添加#!/bin/sh

    【讨论】:

      猜你喜欢
      • 2018-08-08
      • 2020-01-27
      • 1970-01-01
      • 2017-05-03
      • 2023-03-11
      • 2022-01-09
      • 2020-06-01
      • 2020-09-26
      • 1970-01-01
      相关资源
      最近更新 更多