建议使用哪种方法来更新在 Amazon ECS 中运行的服务的容器?
该AWS文档说:“如果你已经更新了应用程序的泊坞图像,你可以创建一个新的任务定义与图像,并将其部署到您的服务,一次一个任务。” 这几乎是当前文档中当前可用的所有内容(2015 年 4 月 13 日)。
我是否理解正确,在 Amazon ECS 中更新我的应用程序容器的唯一方法是创建一个新任务,然后停止旧任务并启动新任务?
我已经成功地在 Core OS 和 Fleectl 中使用了“最新”标签。这样做的好处是不需要为新的更新更改 Docker 镜像的标签,因为重新加载服务将看到新的更改并更新容器(使用相同的标签“最新”)。
您使用哪种方法在 Amazon ECS 中使用更新的 docker 镜像更新您的服务?
我们有一个从外部数据源加载一些配置文件的任务。上传设置后,我们希望能够重新启动服务中的所有任务,以便设置传播到所有实例。
重新启动所有服务的最佳方法是什么?
我们有一个“解决方法”,包括将“任务数”设置为 0 然后备份,但这绝对不是它应该完成的方式并且有停机时间。
我正在使用 Amazon ECS(Docker 的重新打包),我发现 ECS 似乎没有提供一项 Docker 功能。即,我希望在一个实例中运行多个容器,并将进入 IP 地址 1 的请求映射到容器 1,进入 IP 地址 2 的请求映射到容器 2,等等。
在 Docker 中,将容器绑定到特定 IP 地址是通过以下方式完成的:
docker run -p myHostIPAddr:80:8080 imageName command
Run Code Online (Sandbox Code Playgroud)
但是,在 Amazon ECS 中,似乎没有办法做到这一点。
我已经设置了一个具有多个弹性 IP 地址的 EC2 实例。将容器配置为任务定义的一部分时,可以将主机端口映射到容器端口。但是,与 Docker 不同的是,ECS 不提供将主机 IP 地址指定为映射的一部分的方法。
另一个转折点是我希望来自容器 N 的出站请求具有容器 N 的外部 IP 地址。
有没有办法做到以上所有?
我浏览了 AWS CLI 文档以及适用于 Java 的 AWS 开发工具包。我可以看到 CLI 可以返回一个包含如下元素的 networkBindings 数组:
{
"bindIP": "0.0.0.0",
"containerPort": 8021,
"hostPort": 8021
},
Run Code Online (Sandbox Code Playgroud)
Java SDK 有一个名为 NetworkBinding 的类,表示相同的信息。但是,此信息似乎仅用于输出,以响应请求。我找不到向 ECS 提供此绑定信息的方法。
我想这样做的原因是我想为不同的选区设置完全不同的 VM,在同一个 …
我有一个 AWS Fargate 任务在公共子网中运行 Web 应用程序,因此它有一个公共地址。我的问题是如何将域(通过 Route 53)连接到该任务,以便在部署它的新版本时不会中断。
任何帮助将非常感激。
谢谢
我正在尝试设置一个 ECS,但到目前为止我遇到了一些权限问题,我已经在这个论坛上提出了一些问题。
我想我到目前为止被卡住了,因为老实说,我无法在一个地方简明地找出所有这些角色要求。
似乎我需要定义至少两个角色:
1) ECS 容器 http://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html
2) ECS 任务 http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#enable_task_iam_roles
这是正确的吗?
我错过了什么吗?是否有任何特殊的 IAM 要求?
我无法完全理解我的 AWS ECS Docker Hub 映像的映像[registry-url]/[namespace]/[image]:[tag]URL 。
使用 Docker 客户端,它只是docker run -it hendry/count.
那么 Docker Hub 的镜像 URL 是什么?
我正在尝试在悉尼地区创建一个非常简单的集群。
这是一个非常简单的设置。我指定硬盘为60G。我想在集群中有两个 ec2 实例。
它们在 ec2 面板中按预期显示。
但是 ec2 实例没有显示在 ecs 集群页面中:
1)为什么会发生?
2)有没有我可以检查的日志来找出潜在的问题?
我们有两个 AWS 账户。账户 A 有 ECR 存储库,账户 B 旨在能够从中提取。
我尝试在账户 A 中设置存储库权限声明以允许从账户 B 中提取,但 AWS 声称我的策略无效。
我试过了:
Your permission statements have one or more invalid parameters. Invalid parameter at 'PolicyText' failed to satisfy constraint: 'Invalid repository policy provided'arn:aws:iam::1234567891011:root) 中root 用户的 ARN 。这导致错误The service name arn:aws:iam::1234567891011:root is invalid. A valid service name format is [service].amazonaws.com.以上是通过 AWS 控制台完成的,该控制台不允许直接编辑 JSON 以获得 ECR 权限。我已经尝试了aws ecr set-repository-policy具有上述更改的 CLI …
我有一个 Node.js 应用程序和一个在 AWS ECS 上运行的 MongoDB 数据库。我目前的设置由 2 个 ELB 和 2 个实例组成,每个实例运行一个 Docker 容器及其分配的服务(节点/mongo):
Elastic Load Balancer -> Dockerized Node -> Elastic Load Balancer -> Dockerized MongoDB
Run Code Online (Sandbox Code Playgroud)
我正在运行 MongoDB 的官方 Docker 映像:https : //registry.hub.docker.com/_/mongo/
关于如何使用 Docker 和 ECS 为 MongoDB 部署副本集的任何指示,每个副本都运行在不同的实例上?
在 ecs 集群中,我有一个运行着 2 个 ec2 实例的服务。我更新了任务定义以获取新的 docker 镜像。但即使有新的任务定义,旧的任务定义仍在运行。
我已使用以下命令更新任务定义和服务。
aws ecs register-task-definition --family service90-task --cli-input-json file://service90-task.json
aws ecs update-service --cluster service90-cluster --service service90-service --desired-count 0
TASK_REVISION=`aws ecs describe-task-definition --task-definition service90-task | egrep "revision" | tr "/" " " | awk '{print $2}' | sed 's/"$//'`
aws ecs update-service --cluster service90-cluster --service service90-service --task-definition service90-task:${TASK_REVISION} --desired-count 2
Run Code Online (Sandbox Code Playgroud)
我尝试了几次,但无法弄清楚我哪里出错了。我想让 ecs 服务运行新的任务定义而不是旧的。