本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配 Amazon ECS 使用綁定掛載
透過綁定掛載,主機上的檔案或目錄 (例如 Amazon EC2 執行個體) 會掛載至容器中。在 Fargate 和 Amazon EC2 執行個體上託管的任務支援綁定掛載。綁定掛載與使用它們的容器的生命週期相關聯。使用綁定掛載的所有容器停止之後,例如當任務停止時,資料就會被移除。對於 Amazon EC2 執行個體上託管的任務,可以將資料連接至主機 Amazon EC2 執行個體的生命週期,方法是在任務定義中指定 host 與選用的 sourcePath 值。如需詳細資訊,請參閱 Docker 文件中的 Bind mounts
以下是綁定掛載的常用案例。
-
若要提供空白的資料磁碟區以便在一個或多個容器中掛載。
-
若要在一個或多個容器中掛載主機資料磁碟區。
-
若要與相同任務中的其他容器共用來源容器的資料磁碟區。
-
若要將 Dockerfile 中的路徑及其內容公開給一個或多個容器。
使用綁定掛載時的考量
使用綁定掛載時,請考量下列事項。
-
根據預設, AWS Fargate 使用平台版本
1.4.0或更新版本 (Linux)1.0.0或更新版本 (Windows) 在 上託管的任務,會為綁定掛載接收至少 20 GiB 的暫時性儲存。您可以透過在任務定義中指定ephemeralStorage參數來增加暫時性儲存的總量,最多可達 200 GiB。 -
若要在執行任務時將 Dockerfile 中的檔案公開至資料磁碟區,Amazon ECS 資料平面會尋找
VOLUME指令。如果在VOLUME指令中指定的絕對路徑與在任務定義中指定的containerPath相同,則VOLUME指令路徑中的資料會複製到資料磁碟區。在下列 Dockerfile 範例中,/var/log/exported目錄中名為examplefile的檔案會寫入主機,然後掛載在容器內。FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN mkdir -p/var/log/exportedRUN touch/var/log/exported/examplefileVOLUME ["/var/log/exported"]根據預設,磁碟區許可設定為
0755和擁有者設定為root。您可以在 Dockerfile 中自訂這些許可。在下列範例中,將目錄的擁有者設定為node。FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN yum install -y shadow-utils && yum clean all RUN useraddnodeRUN mkdir -p /var/log/exported && chownnode:node/var/log/exported RUN touch /var/log/exported/examplefile USERnodeVOLUME ["/var/log/exported"] -
對於在 Amazon EC2 執行個體上託管的任務,當
host和sourcePath值未指定時,Docker 常駐程式會為您管理綁定掛載。當沒有任何容器參考此綁定掛載時,Amazon ECS 容器代理程式任務清除服務最終會予以刪除。根據預設,這會在容器退出的 3 小時後發生。不過,您可以使用ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION代理程式變數設定此持續時間。如需詳細資訊,請參閱Amazon ECS 容器代理程式組態。如果您需要此資料的保留時間超過容器的生命週期,請為綁定掛載指定sourcePath值。 -
對於託管在 Amazon ECS 受管執行個體上的任務,根檔案系統的部分是唯讀的。讀取/寫入繫結掛載必須使用可寫入目錄,例如
/var持久性資料或/tmp暫存資料。嘗試建立其他目錄的讀取/寫入繫結掛載會導致任務無法啟動,並出現類似以下的錯誤:error creating empty volume: error while creating volume path '/path': mkdir /path: read-only file system唯讀繫結掛載 (在
mountPoints參數"readOnly": true中設定為 ) 可以指向主機上任何可存取的目錄。若要檢視可寫入路徑的完整清單,您可以在 Amazon ECS 受管執行個體上執行任務,並使用 檢查執行個體的掛載資料表。使用下列設定建立任務定義,以存取主機檔案系統:
{ "pidMode": "host", "containerDefinitions": [{ "privileged": true,...}] }然後從容器內執行下列命令:
# List writable mounts cat /proc/1/root/proc/1/mounts | awk '$4 ~ /^rw,/ || $4 == "rw" {print $2}' | sort # List read-only mounts cat /proc/1/root/proc/1/mounts | awk '$4 ~ /^ro,/ || $4 == "ro" {print $2}' | sort重要
privileged設定會授予主機上的容器延伸功能,相當於根存取。在此範例中,它用於檢查主機的掛載資料表以進行診斷。如需詳細資訊,請參閱避免以特權方式執行容器 (Amazon EC2)。如需在容器中以互動方式執行命令的詳細資訊,請參閱 使用 ECS Exec 監控 Amazon ECS 容器。