我使用以下步骤连接到 EC2 容器实例,https: //docs.aws.amazon.com/AmazonECS/latest/developerguide/instance-connect.html 想知道如何连接到 FARGATE 托管的容器实例。
5 回答
在 github https://github.com/aws/amazon-ecs-cli/issues/143上查看该问题我认为不可能将远程主机的 docker exec 放入 ECS Fargate 上的容器中。您可以尝试使用例如 systemd ( https://docs.docker.com/config/containers/multi-service_container/ ) 在一个容器中运行 ssh 守护进程和您的主进程,并使用 SSH 连接到您的容器,但通常这不是一个好主意在容器世界中。
从 2021 年 3 月中旬开始,当容器在 AWS Fargate 中运行时,可以在 ECS 容器中执行命令,请检查使用 Amazon ECS Exec 访问您在 AWS Fargate 和 Amazon EC2 上的容器
快速检查清单:
- 在服务中启用命令执行。
- 确保在服务中使用最新的平台版本。
- 为任务执行角色添加
ssmmessages:..
权限。 - 强制新部署服务以在启用命令执行的情况下运行任务。
这应该允许运行/bin/bash
命令并将交互式 shell 放入在 AWS Fargate 上运行的容器中。这一切都在我上面引用的文章中得到了清楚的解释。
以下是将 SSH/sshd 添加到容器以获取直接访问权限的示例:
# Dockerfile
FROM alpine:latest
RUN apk update && apk add --virtual --no-cache \
openssh
COPY sshd_config /etc/ssh/sshd_config
RUN mkdir -p /root/.ssh/
COPY authorized-keys/*.pub /root/.ssh/authorized_keys
RUN cat /root/.ssh/authorized-keys/*.pub > /root/.ssh/authorized_keys
RUN chown -R root:root /root/.ssh && chmod -R 600 /root/.ssh
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
RUN ln -s /usr/local/bin/docker-entrypoint.sh /
# We have to set a password to be let in for root - MAKE THIS STRONG.
RUN echo 'root:THEPASSWORDYOUCREATED' | chpasswd
EXPOSE 22
ENTRYPOINT ["docker-entrypoint.sh"]
# docker-entrypoint.sh
#!/bin/sh
if [ "$SSH_ENABLED" = true ]; then
if [ ! -f "/etc/ssh/ssh_host_rsa_key" ]; then
# generate fresh rsa key
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
fi
if [ ! -f "/etc/ssh/ssh_host_dsa_key" ]; then
# generate fresh dsa key
ssh-keygen -f /etc/ssh/ssh_host_dsa_key -N '' -t dsa
fi
#prepare run dir
if [ ! -d "/var/run/sshd" ]; then
mkdir -p /var/run/sshd
fi
/usr/sbin/sshd
env | grep '_\|PATH' | awk '{print "export " $0}' >> /root/.profile
fi
exec "$@"
在服务上启用执行命令。
aws ecs update-service --cluster <Cluster> --service <Service> --enable-execute-command
连接到 fargate 任务。
aws ecs execute-command --cluster <Cluster> \
--task <taskId> \
--container <ContainerName> \
--interactive \
--command "/bin/sh"
参考 - https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html