Amazon Elastic Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

手动更新 Amazon ECS 容器代理(适用于没有针对 Amazon ECS 优化过的 AMI)

手动更新 Amazon ECS 容器代理(适用于没有针对 Amazon ECS 优化过的 AMI)

  1. 通过 SSH 登录到容器实例。

  2. 检查您的代理是否使用 ECS_DATADIR 环境变量保存其状态。

    ubuntu:~$ docker inspect ecs-agent | grep ECS_DATADIR

    输出:

    "ECS_DATADIR=/data",

    重要

    如果上一个命令未返回 ECS_DATADIR 环境变量,则您在更新代理前必须停止在此容器实例上运行的任何任务。具有 ECS_DATADIR 环境变量的较新的代理将保存其状态,您可以在任务运行的同时更新它们,而不会出现问题。

  3. 停止 Amazon ECS 容器代理。

    ubuntu:~$ docker stop ecs-agent
  4. 删除代理容器。

    ubuntu:~$ docker rm ecs-agent
  5. 确保 /etc/ecs/ecs.config 中存在 /etc/ecs 目录和 Amazon ECS 容器代理配置文件。

    ubuntu:~$ sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
  6. 编辑 /etc/ecs/ecs.config 文件,并确保它至少包含以下变量声明。如果不希望向默认群集注册容器实例,请将 ECS_CLUSTER 的值指定为群集名称。

    ECS_DATADIR=/data ECS_ENABLE_TASK_IAM_ROLE=true ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true ECS_LOGFILE=/log/ecs-agent.log ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"] ECS_LOGLEVEL=info ECS_CLUSTER=default

    有关这些和其他代理运行时选项的更多信息,请参阅 Amazon ECS 容器代理配置

    注意

    您可以选择将代理环境变量存储在 Amazon S3 中 (可在启动时使用 Amazon EC2 用户数据将其下载到容器实例)。建议对敏感信息(如私有存储库的身份验证凭证)采用此方法。有关更多信息,请参阅 将容器实例配置存储在 Amazon S3 中私有注册表身份验证

  7. 从 Docker Hub 中拉取最新的 Amazon ECS 容器代理映像。

    ubuntu:~$ docker pull amazon/amazon-ecs-agent:latest

    输出:

    Pulling repository amazon/amazon-ecs-agent a5a56a5e13dc: Download complete 511136ea3c5a: Download complete 9950b5d678a1: Download complete c48ddcf21b63: Download complete Status: Image is up to date for amazon/amazon-ecs-agent:latest
  8. 在容器实例上运行最新的 Amazon ECS 容器代理。

    注意

    您应使用 Docker 重新启动策略或进程管理器(如 upstartsystemd)将容器代理作为服务或守护程序处理,并确保在容器代理退出后重新启动它。有关更多信息,请参阅 Docker 文档中的自动启动容器重新启动策略。针对 Amazon ECS 优化过的 AMI 使用 ecs-init RPM 达到此目的,并且您可以在 GitHub 上查看此 RPM 的源代码。有关适用于 Ubuntu 16.04 和 CentOS 7 的示例 systemd 单元文件,请参阅示例容器实例用户数据配置脚本

    以下示例代理运行命令分为若干个单独的行以显示每个选项。有关这些和其他代理运行时选项的更多信息,请参阅 Amazon ECS 容器代理配置

    重要

    运行启用了 SELinux 的操作系统需要在 docker run 命令中使用 --privileged 选项。此外,对于启用了 SELinux 的容器实例,建议向 /log/data 卷挂载添加 :Z 选项。但是,在运行该命令前,这些卷的主机挂载必须存在,否则会出现 no such file or directory 错误。如果您在启用了 SELinux 的容器实例上运行 Amazon ECS 代理时遇到困难,请执行以下操作:

    • 在容器实例上创建主机卷挂载点。

      ubuntu:~$ sudo mkdir -p /var/log/ecs /var/lib/ecs/data
    • --privileged 选项添加到下面的 docker 命令中。

    • :Z 选项追加到针对下面的 docker run 命令的 /log/data 容器卷挂载 (例如,--volume=/var/log/ecs/:/log:Z)。

    ubuntu:~$ sudo docker run --name ecs-agent \ --detach=true \ --restart=on-failure:10 \ --volume=/var/run:/var/run \ --volume=/var/log/ecs/:/log \ --volume=/var/lib/ecs/data:/data \ --volume=/etc/ecs:/etc/ecs \ --net=host \ --env-file=/etc/ecs/ecs.config \ amazon/amazon-ecs-agent:latest

    注意

    如果您收到一条 Error response from daemon: Cannot start container 消息,则可以利用 sudo docker rm ecs-agent 命令删除失败的容器并重新尝试运行代理。