Amazon EC2 Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

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

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

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

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

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

    输出:

    "ECS_DATADIR=/data",

    重要

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

  3. 停止 Amazon ECS 容器代理。

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

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

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

    Copy
    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 容器代理映像。

    Copy
    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 代理时遇到困难,请执行以下操作:

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

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

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

    Copy
    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 命令删除失败的容器并重新尝试运行代理。