无法在运行于ECS中的Docker容器中执行exec命令

84次阅读
没有评论

问题描述

在尝试登录到部署在AWS ECS集群中的一个容器(来自ECR)时遇到问题。他正在使用docker compose/ecs集成来部署此集群。他的docker compose文件非常简单。由于容器需要GPU,因此他将其部署到支持GPU的实例(g4dn.12xlarge),使用了一个ecs优化的AMI(ami-03d0d75de9d82f509)。他正在尝试执行exec命令进入容器,但无法登录。
他执行了以下命令来尝试登录:

aws ecs execute-command --cluster apptest --task 36fd9d835ad24b4ca188e40c59768cee --container apptest --interactive --command "/bin/sh"

但是他遇到了以下错误:

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.An error occurred (TargetNotConnectedException) when calling the ExecuteCommand operation: The execute command failed due to an internal error. Try again later.

他想了解更多关于为什么会出现这个错误的信息,以及应该检查和测试什么。

用户还提到他运行了amazon-ecs-exec-checker脚本,并给出了一些输出。这个脚本检查了ECS任务和其他资源的状态,以及与ECS Exec相关的设置和权限。他认为所有正确的权限都已经配置好,但是仍然遇到了问题。

解决方案

以下方案中的操作涉及AWS服务和ECS的配置,确保在操作之前先做好备份并仔细阅读相关文档。

方案1

检查网络配置和访问权限
1. 首先,确保您的实例具有出站网络访问权限,因为Session Manager需要与AWS服务通信。
2. 如果您的实例位于私有子网中,请确保已正确配置NAT网关或NAT实例,以便实例可以访问外部网络。
3. 检查实例的安全组设置,确保它允许出站流量,特别是对于SSM服务。

检查IAM角色和权限
1. 确保ECS任务使用的IAM角色具有必要的权限来执行Session Manager操作。您可以在任务角色的策略中添加以下权限:
ssmmessages:CreateControlChannel
ssmmessages:CreateDataChannel
ssmmessages:OpenControlChannel
ssmmessages:OpenDataChannel

检查SSM Agent和插件
1. 确保实例上安装了SSM Agent,并且它的版本与AWS CLI中列出的版本兼容。
2. 确保您安装了Session Manager插件。您可以使用aws ssm create-document命令创建一个名为”SSM-SessionManagerRunShell”的文档,以确保插件已正确安装。

方案2

尝试手动使用Session Manager连接实例
1. 打开AWS控制台,并导航到”系统管理”(Systems Manager)。
2. 在左侧导航栏中,选择”会话管理”(Session Manager)。
3. 单击”启动会话”(Start session)。
4. 选择目标实例,然后单击”启动会话”。
5. 在会话窗口中,尝试执行一些命令,看是否能成功连接和执行。

方案3

检查初始化和容器配置
1. 确保在您的Docker Compose文件中正确定义了容器的初始化进程(如果有的话)。
2. 确保容器的启动脚本或入口命令没有出错,并且容器能够正常启动。

方案4

查看AWS文档和社区讨论
1. 访问AWS官方文档了解更多关于Session Manager的信息和用法。
2. 访问AWS开发者论坛查看其他用户的类似问题和解决方案。

以上是一些可能的解决方案,您可以根据具体情况尝试逐步排查问题。如果问题仍然存在,您可能需要联系AWS支持或者在社区寻求帮助。

正文完