本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為私有 Docker 映像檔設定 Amazon ECS 容器執行個體
Amazon ECS 容器代理程式可以使用基本身份驗證,透過私有登錄進行驗證。當您啟用私有登錄檔身分驗證時,您可以使用您任務定義中的私有 Docker 影像。只有使用EC2啟動類型的工作才支援此功能。
啟用私人登錄驗證的另一種方法,會用 AWS Secrets Manager 來安全地儲存您的私人登錄認證,然後在容器定義中參考它們。這可讓您的任務使用來自私有儲存庫的映像。此方法支援使用EC2或 Fargate 啟動類型的工作。如需詳細資訊,請參閱在 Amazon 中使用非AWS 容器圖像 ECS。
Amazon ECS 容器代理程式會在啟動時尋找兩個環境變數:
-
ECS_ENGINE_AUTH_TYPE
可指定要傳送之身分驗證資料的類型。 -
ECS_ENGINE_AUTH_DATA
包含實際身分驗證的登入資料。
Amazon ECS 優化的 Linux 變體會在容器執行個體啟動時AMI掃描/etc/ecs/ecs.config
檔案中是否有這些變數,以及每次啟動服務時 (使用命sudo start ecs令)。AMIs未經 Amazon ECS 優化的應將這些環境變量存儲在文件中,並將其與--env-file
選項一起傳遞給啟動容器代理的docker run命令。path_to_env_file
重要
我們不建議您在執行個體啟動時EC2使用 Amazon 使用者資料插入這些身份驗證環境變數,也不建議您將這些身份驗證環境變數傳遞給docker run命令。--env
這些方法不適合用於敏感性資料,例如身分驗證登入資料。如需將安全地將身分驗證登入資料新增至容器執行個體的詳細資訊,請參閱 在 Amazon S3 中存儲亞馬遜ECS容器實例配置。
身分驗證格式
私有登錄檔身分驗證有兩種可用的格式,dockercfg
和 docker
。
dockercfg 身分驗證格式
dockercfg
格式使用存放在執行 docker
login 命令時建立之組態檔中的身分驗證資訊。您可以透過在您的本機系統上執行 docker
login,輸入您的登錄使用者名稱、密碼及電子郵件地址來建立此檔案。您也可以登入容器執行個體,並在該處執行命令。根據您的 Docker 版本,這個檔案會做為 ~/.dockercfg
或 ~/.docker/config.json
儲存。
cat ~/.docker/config.json
輸出:
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "zq212MzEXAMPLE7o6T25Dk0i
"
}
}
}
重要
較新版本的 Docker 會如上所示,使用外部 auths
物件建立組態檔。Amazon ECS 代理程式僅支援以下格式的dockercfg
身份驗證資料,而不支援auths
物件。如果您已安裝 jq 公用程式,即可使用以下命令擷取此資料:cat ~/.docker/config.json | jq
.auths
cat ~/.docker/config.json | jq .auths
輸出:
{
"https://index.docker.io/v1/": {
"auth": "zq212MzEXAMPLE7o6T25Dk0i
",
"email": "email@example.com"
}
}
在上述範例中,應將下列環境變數新增至 Amazon ECS 容器代理程式在執行時期載入的環境變數檔案 (ECS針/etc/ecs/ecs.config
對 Amazon 最佳化AMI)。如果您未使用 Amazon ECS 優化,而AMI且您要使用手動啟動代理程式docker
run,請在啟動代理程式時使用--env-file
選項指定環境變數檔案。path_to_env_file
ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"
zq212MzEXAMPLE7o6T25Dk0i
","email":"email@example.com
"}}
您可以使用以下語法設定多個私有登錄檔:
ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"
repo.example-01.com
":{"auth":"zq212MzEXAMPLE7o6T25Dk0i
","email":"email@example-01.com
"},"repo.example-02.com
":{"auth":"fQ172MzEXAMPLEoF7225DU0j
","email":"email@example-02.com
"}}
docker 身分驗證格式
此docker
格式會使用JSON代理程式應該用來驗證之登錄伺服器的表示法。它也包含了該登錄所需要的身分驗證參數 (例如該帳戶的使用者名稱、密碼和電子郵件地址)。對於 Docker Hub 帳戶,JSON表示如下所示:
{ "https://index.docker.io/v1/": { "username": "
my_name
", "password": "my_password
", "email": "email@example.com
" } }
在此範例中,下列環境變數應新增至 Amazon ECS 容器代理程式在執行時期載入的環境變數檔案 (ECS針/etc/ecs/ecs.config
對 Amazon 最佳化AMI)。如果您未使用 Amazon ECS 優化AMI,並且您要使用手動啟動代理程式docker
run,請在啟動代理程式時使用--env-file
選項指定環境變數檔案。path_to_env_file
ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"
my_name
","password":"my_password
","email":"email@example.com
"}}
您可以使用以下語法設定多個私有登錄檔:
ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"
repo.example-01.com
":{"username":"my_name
","password":"my_password
","email":"email@example-01.com
"},"repo.example-02.com
":{"username":"another_name
","password":"another_password
","email":"email@example-02.com
"}}
程序
使用以下程序,開啟容器執行個體的私有登錄檔。
在 Amazon ECS 優化中啟用私有註冊表 AMI
-
使用登入您的容器執行個體SSH。
-
開啟
/etc/ecs/ecs.config
檔案,為您的登錄檔和帳戶新增ECS_ENGINE_AUTH_TYPE
和ECS_ENGINE_AUTH_DATA
值:sudo vi /etc/ecs/ecs.config
此範例會驗證 Docker Hub 使用者帳戶:
ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"
my_name
","password":"my_password
","email":"email@example.com
"}} -
檢查您的代理程式是否是使用
ECS_DATADIR
環境變數儲存其狀態:docker inspect ecs-agent | grep ECS_DATADIR
輸出:
"ECS_DATADIR=/data",
重要
若先前的命令並未傳回
ECS_DATADIR
環境變數,您必須停止任何在此容器執行個體上執行的任務,才能停止您的代理。較新的代理會使用ECS_DATADIR
環境變數儲存其狀態,讓您可以在任務執行中時停止和啟動它們,而不會有任何問題。如需詳細資訊,請參閱更新 Amazon ECS 容器代理。 -
停止
ecs
服務:sudo stop ecs
輸出:
ecs stop/waiting
-
重新啟動
ecs
服務。-
對於 Amazon ECS 優化的 Amazon Linux 2AMI:
sudo systemctl restart ecs
-
對於 Amazon ECS 優化的 Amazon LinuxAMI:
sudo stop ecs && sudo start ecs
-
-
(選擇性) 您可以查詢代理程式內部檢API查作業,以確認代理程式是否正在執行,並查看有關新容器執行個體的一些資訊。如需詳細資訊,請參閱Amazon ECS 容器內省。
curl http://localhost:51678/v1/metadata