本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
手動更新 Amazon ECS 容器代理程式 (適用於非 Amazon ECS 最佳化 AMIs)
有時,您可能需要更新 Amazon ECS 容器代理程式,才能取得錯誤修正和新功能。更新 Amazon ECS 容器代理程式不會中斷容器執行個體上執行的任務或服務。
注意
代理更新不適用於 Windows 容器執行個體。我們建議您啟動新的容器執行個體,以更新您 Windows 叢集中的代理版本。
-
透過 SSH 登入您的容器執行個體。
-
檢查以查看您的代理是否是使用
ECS_DATADIR
環境變數儲存其狀態。ubuntu:~$
docker inspect ecs-agent | grep ECS_DATADIR
輸出:
"ECS_DATADIR=/data",
重要
若先前的命令並未傳回
ECS_DATADIR
環境變數,您必須停止任何在此容器執行個體上執行的任務,才能更新您的代理。較新的代理會使用ECS_DATADIR
環境變數儲存其狀態,讓您可以在任務執行中時更新它們,而不會有任何問題。 -
停止 Amazon ECS 容器代理程式。
ubuntu:~$
docker stop ecs-agent
-
刪除代理容器。
ubuntu:~$
docker rm ecs-agent
-
確保
/etc/ecs
目錄和 Amazon ECS 容器代理程式組態檔案存在於/etc/ecs/ecs.config
。ubuntu:~$
sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
-
編輯
/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 中儲存 Amazon ECS 容器執行個體組態 和 在 Amazon ECS 中使用非AWS 容器映像。
-
從 Amazon Elastic Container Registry Public 中提取最新的 Amazon ECS 容器代理程式映像。
ubuntu:~$
docker pull public.ecr.aws/ecs/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
-
在容器執行個體上執行最新的 Amazon ECS 容器代理程式。
注意
使用 Docker 重新啟動政策或處理序管理員 (例如 upstart 或 systemd) 將容器代理程式做為服務或常駐程式處理,並確保在結束後重新啟動它。Amazon ECS 最佳化 AMI 會為此目的使用
ecs-init
RPM,您可以檢視此 RPM onWord 的原始程式碼。 GitHub 以下代理程式執行命令範例分成獨立的各行來顯示每個選項。如需這些和其他代理執行時間選項的詳細資訊,請參閱「Amazon ECS 容器代理程式組態」。
重要
啟用 SELinux 的作業系統需要docker run命令中的
--privileged
選項。此外,對於啟用 SELinux 的容器執行個體,建議您將:Z
選項新增至/log
和/data
磁碟區掛載。但是,這些磁碟區的主機掛載必須在您執行命令前存在,否則您會接收到no such file or directory
錯誤。如果您在啟用 ECS 的容器執行個體上執行 Amazon SELinux 代理程式時遇到困難,請採取下列動作:-
在您的容器執行個體上建立主機磁碟區掛載點。
ubuntu:~$
sudo mkdir -p /var/log/ecs /var/lib/ecs/data
-
為以下 docker run 命令新增
--privileged
選項。 -
為以下 docker run 命令的
/log
和/data
容器磁碟區掛載附加:Z
選項 (例如,--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 \ --volume=/etc/ecs:/etc/ecs/pki \ --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 命令刪除失敗的容器,並再度嘗試執行代理程式。 -