【问题标题】:Interactive shell in Docker image with Amazon ECS with `aws ecs run-task` followed by `aws ecs execute-command`Docker 映像中的交互式 shell 与 Amazon ECS 与 `aws ecs run-task` 后跟 `aws ecs execute-command`
【发布时间】:2021-09-21 00:07:56
【问题描述】:

我想在我的 AWS ECS/Fargate 集群上的公共 Docker 映像中启动一个交互式 shell,以便从集群内部运行网络/连接测试。

似乎官方的做法是使用aws ecs run-task 后跟aws ecs execute-command [1][2]

如果可能,我想使用现有的公共 Docker Hub 映像,而不是构建自定义映像。

如果我在没有命令或默认命令的情况下运行 do run-task,任务将退出,execute-command 将无法处理已退出的任务。

"Essential container in task exited"

如果我设置sleep 10000 的 Docker 命令,我会得到:

"CannotStartContainerError: ResourceInitializationError: failed to create new container runtime task: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: \"sleep 10000\": executable file not found in $PATH: unknown",

理想情况下,run-task 和 execute-command 将在一个步骤中组合在一起。我不希望后台任务无限期地运行,我希望 shell 以交互方式运行一些命令,这些命令在我完成后会被清理。我将如何实现这一目标?

[1]https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/

[2]https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html

【问题讨论】:

  • 我很困惑。如果您只需要/想要运行命令然后退出,为什么要启动任务然后ecs exec 进入它?正确的模式是启动覆盖entrypoint/command 的命令,并使用您要使用的命令 no?
  • 所以,我想运行一个交互式 shell 命令,而不仅仅是任何命令。交互式 shell 支持是一项新功能,大多数 ECS 并非为此而设计。我可以在 ECS 任务定义中指定或覆盖入口点/命令。我需要使用execute-command 来获取交互式外壳(AFAIK)。
  • 因此,如果您需要与 shell 交互,那么是的,您需要使用ecs exec。 Mark 提供的建议似乎是实现它的好方法。
  • 您的主要问题已经在下面得到解答,但是您在尝试运行sleep 10000 时收到的错误消息是因为您无意中要求运行一个字面意思为“sleep 10000”的二进制文件。参数被接受为一个数组,因此最简单的方法是指定"sleep", "10000" 而不是"sleep 10000"。如果你最终还想运行一个小 shell 脚本,你可以改用 "sh", "-c", "sleep 10000" 之类的东西。

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


【解决方案1】:

我遇到了同样的问题。我终于能够在任务定义中使用以下命令让容器“空闲”:

"tail", "-F", "/dev/null"

然后我可以通过交互式execute-command 连接。

【讨论】:

  • "sleep", "inf" 是另一种好方法。
猜你喜欢
  • 2017-04-20
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 2021-02-13
  • 1970-01-01
  • 2020-12-30
相关资源
最近更新 更多