本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
任务定义参数
任务定义包括以下各部分:任务系列、IAM 任务角色、网络模式、容器定义、卷、任务放置约束和启动类型。系列和容器定义在任务定义中是必需的,而任务角色、网络模式、卷、任务放置约束和启动类型是可选的。
以下是每个任务定义参数的更详细说明。
Family
family
-
类型:字符串
必需:是
当您注册任务定义时,将为其提供一个系列,与任务定义的多个版本的名称类似,它是使用修订号指定的。注册到某个特定系列的第一个任务定义将获得修订 1,而随后注册的任何任务定义将获得后续修订号。
任务角色
taskRoleArn
-
类型:字符串
必需:否
当您注册任务定义时,可以为 IAM 角色提供任务角色,该角色允许任务中的容器代表您调用在其关联策略APIs中指定的 AWS。有关更多信息,请参阅任务的 IAM 角色.
Windows 上任务的 IAM 角色需要在您启动
-EnableTaskIAMRole
时设置 Amazon ECS-optimized Windows Server AMI. 选项。此外,您的容器必须运行一些配置代码才能利用此功能。有关更多信息,请参阅任务的 Windows IAM 角色.
任务执行角色
executionRoleArn
-
类型:字符串
必需:否
任务执行角色的 Amazon Resource Name (ARN),该角色授予 Amazon ECS 容器代理代表您进行 AWS API 调用的权限。任务执行 IAM 角色是必需的,具体取决于任务的要求。有关更多信息,请参阅Amazon ECS 任务执行 IAM 角色.
网络模式
networkMode
-
类型:字符串
必需:否
在任务中用于容器的 Docker 联网模式。对于在 Amazon ECS 实例上托管Amazon EC2的任务,有效值为
none
、bridge
、awsvpc
和host
。 如果未指定网络模式,则默认网络模式为bridge
。如果网络模式设置为
none
,则任务的容器没有外部连接性,且无法在容器定义中指定端口映射。如果网络模式为
bridge
,该任务利用在每个容器实例内运行的 Docker 的内置虚拟网络。如果网络模式为
host
,则任务将绕过 Docker 的内置虚拟网络并将容器端口直接映射到Amazon EC2实例的网络接口。在此模式下,当使用端口映射时,无法在单个容器实例上运行同一任务的多个实例化。重要 在使用
host
网络模式时,您不应使用根用户 (UID 0) 运行容器。使用非 root 用户被认为是最佳实践。如果网络模式为
awsvpc
,则将为任务分配弹性网络接口,且在创建服务或运行具有任务定义的任务时必须指定NetworkConfiguration
有关更多信息,请参阅Amazon ECS 任务联网. 目前,只有Amazon ECS-optimized AMI、包含ecs-init
程序包的其他 Amazon Linux 变体或 AWS Fargate 基础设施才支持awsvpc
网络模式。host
和awsvpc
网络模式为容器提供最高的联网性能,因为它们使用 Amazon EC2 网络堆栈,而不是bridge
模式提供的虚拟化网络堆栈。使用host
和awsvpc
网络模式,公开的容器端口将直接映射到相应的主机端口(用于host
网络模式)或附加的弹性网络接口端口(用于awsvpc
网络模式),因此您无法利用动态主机端口映射。Docker for Windows 使用的网络模式(也称为
NAT
)不同于 Docker for Linux。在将任务定义注册到 Windows 容器时,您不得指定网络模式。如果使用 AWS 管理控制台将任务定义注册到 Windows 容器,必须选择default
网络模式。如果使用 Fargate 启动类型,则需要
awsvpc
网络模式。如果使用 EC2 启动类型,则允许的网络模式取决于底层 EC2 实例的操作系统。对于 Linux,可以使用任何网络模式。对于 Windows,仅允许上面所述的NAT
模式。
容器定义
当您注册任务定义时,必须指定将传递给容器实例上的 Docker 守护程序的容器定义的列表。容器定义中允许以下参数。
标准容器定义参数
以下任务定义参数是必需的参数或在大多数容器定义中使用。
Name
name
-
类型:字符串
必需:是
容器的名称。 最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。如果您正在任务定义中将多个容器链接在一起,则可在一个容器的
name
中输入另一个容器的links
以连接容器。
Image
image
-
类型:字符串
必需:是
用于启动容器的映像。此字符串将直接传递给 Docker 守护程序。默认情况下,Docker Hub 注册表中的映像可用。您还可以使用
或 指定其他存储库repository-url
/image
:tag
。 允许最多 255 个字母 (大写和小写字母)、数字、连字符、下划线、冒号、句点、正斜杠和井号。 此参数将映射到 的repository-url
/image
@digest
Image
部分创建容器中的 Docker Remote APIIMAGE
docker run和 的参数。 -
在新任务启动时,Amazon ECS 容器代理会提取最新版本的指定映像和标签以供容器使用。但是,存储库映像的后续更新不会传播到已在运行的任务。
-
支持私有注册表中的映像。有关更多信息,请参阅任务的私有注册表身份验证.
-
Amazon ECR 存储库中的映像可通过使用完整的
registry/repository:tag
或registry/repository@digest
命名约定来指定。例如,aws_account_id
.dkr.ecr.region
.amazonaws.com/
或my-web-app
:latest
aws_account_id
.dkr.ecr.region
.amazonaws.com/
my-web-app
@sha256:94afd1f2e64d908bc90dbca0035a5b567EXAMPLE
-
Docker Hub 上的官方存储库中的映像使用一个名称 (例如,
ubuntu
或mongo
). -
Docker Hub 上其他存储库中的映像通过组织名称 (例如,) 进行限定。
amazon/amazon-ecs-agent
). -
其他在线存储库中的映像由域名 (例如,) 进行进一步限定。
quay.io/assemblyline/ubuntu
).
-
Memory
memory
-
类型:整数
必需:否
要提供给容器MiB的内存量 (以 为单位)。如果您的容器尝试使用超出此处指定的内存,该容器将被终止。为任务中的所有容器预留的内存总量必须低于任务
memory
值(如果指定了一个)。此参数将映射到 的Memory
部分创建容器中的 Docker Remote API和 的 --memory
docker run选项。 如果使用的是 Fargate 启动类型,则此参数是可选参数。
如果使用的是 EC2 启动类型,则必须指定任务级内存值或容器级内存值。如果同时指定容器级
memory
和memoryReservation
值memory
,则 必须大于memoryReservation
。 如果指定memoryReservation
,则将从容器所在的容器实例的可用内存资源中减去该值。否则,将使用memory
的值。Docker 守护程序为容器预留至少 4 MiB 个内存,因此,您不应为容器指定小于 4 MiB 个内存。
注意 如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源,请参阅容器实例内存管理.
memoryReservation
-
类型:整数
必需:否
要为容器预留MiB的内存的软限制(在 中)。当系统内存处于争用状态时,Docker 会尝试将容器内存保持在此软限制内;不过,您的容器可以在需要时使用更多内存,最大量可达
memory
参数指定的硬限制(如果适用),或容器实例上的所有可用内存(以先达到者为准)。此参数将映射到 的MemoryReservation
部分创建容器中的 Docker Remote API和 的 --memory-reservation
docker run选项。 如果未指定任务级内存值,则必须为容器定义中的一个或两个
memory
或memoryReservation
指定非零整数。如果同时指定两者memory
,则 必须大于memoryReservation
。 如果指定memoryReservation
,则将从容器所在的容器实例的可用内存资源中减去该值。否则,将使用memory
的值。例如,如果您MiB的容器通常使用 128 个内存,但有时会在短时间内突增到 256 个MiB内存,则可以将 设置为
memoryReservation
128 个 MiB,将memory
硬限制设置为 300 个 MiB。 此配置将允许容器仅MiB从容器实例上的其余资源预留 128 内存,但还允许容器在需要时使用更多内存资源。Docker 守护程序为容器预留至少 4 MiB 个内存,因此,您不应为容器指定小于 4 MiB 个内存。
端口映射
portMappings
-
类型:对象数组
必需:否
端口映射可让容器访问主机容器实例上的端口以发送或接收流量。
对于使用
awsvpc
网络模式的任务定义,您应仅指定containerPort
。hostPort
可以留空或值必须与 相同containerPort
。Windows 上的端口映射使用
NetNAT
网关地址而不是localhost
。 Windows 上的端口映射没有回环,因此您无法从主机本身访问容器的映射端口。此参数将映射到 的
PortBindings
部分创建容器中的 Docker Remote API和 的 --publish
docker run选项。 如果任务定义的网络模式设置为 host
,则主机端口必须是未定义的,或者必须与端口映射中的容器端口匹配。注意 在任务达到
RUNNING
状态之后,手动和自动主机及容器端口分配在以下位置可见:-
控制台:所选任务的容器描述的 Network Bindings (网络绑定) 部分。
-
AWS CLI
networkBindings
命令输出的 describe-tasks 部分。 -
API:
DescribeTasks
响应。
containerPort
-
类型:整数
必需:是,当使用
portMappings
时绑定到用户指定的或自动分配的主机端口的容器上的端口号。
如果在具有 Fargate 的任务中使用容器,公开的端口应使用
containerPort
. 指定。如果在具有 EC2 启动类型的任务中使用容器,且指定了容器端口而不是主机端口,则您的容器将自动接收临时端口范围中的主机端口。有关更多信息,请参阅
hostPort
。 以这种方式自动分配的端口映射不会计入容器实例的 100 个预留端口限制。 hostPort
-
类型:整数
必需:否
要为您的容器预留的容器实例上的端口号。
如果在具有 Fargate 启动类型的任务中使用容器,则
hostPort
可以留空或为与containerPort
. 相同的值。如果在具有 EC2 启动类型的任务中使用容器,则可以为容器端口映射指定非预留主机端口(这称为静态主机端口映射),也可以在指定 时省略
hostPort
(或将其设置为0
containerPort
),并且您的容器将自动在容器实例操作系统和 Docker 版本的临时端口范围中接收端口(这称为动态主机端口映射)。实例上的 下列出了 Docker 版本 1.6.0 及更高版本的默认临时端口范围
/proc/sys/net/ipv4/ip_local_port_range
。 如果此内核参数不可用49153–65535
,则使用 中的默认临时端口范围。不要尝试指定位于临时端口范围中的主机端口,因为这些端口保留供自动分配。通常,低于32768
的端口位于临时端口范围之外。默认预留端口
22
用于 SSH、Docker 端口2375
和2376
,以及 Amazon ECS 容器代理端口51678-51680
。 之前由用户为正在运行的任务指定的任何主机端口也会在任务运行时预留(在任务停止后,将释放主机端口)。当前预留端口将显示在remainingResources
输出的 describe-container-instances 中,并且一个容器实例一次最多可拥有 100 个预留端口,包括默认预留端口。自动分配的端口不计入 100 个预留端口限制。 protocol
-
类型:字符串
必需:否
用于端口映射的协议。有效值为
tcp
和udp
。 默认值为tcp
。重要 UDP 支持仅适用于使用 Amazon ECS 容器代理的 1.2.0 版(例如
amzn-ami-2015.03.c-amazon-ecs-optimized
AMI)或更高版本或者使用已更新至版本 1.3.0 或更高版本的容器代理启动的容器实例。要将您的容器代理更新至最新版本,请参阅更新 Amazon ECS 容器代理.
如果您指定的是主机端口,请使用以下语法:
"portMappings": [ { "containerPort": integer, "hostPort": integer } ... ]
如果您需要自动分配的主机端口,请使用以下语法:
"portMappings": [ { "containerPort": integer } ... ]
-
高级容器定义参数
以下高级容器定义参数为用于在容器实例上启动容器的 docker run
运行状况检查
healthCheck
-
容器的运行状况检查命令和关联的配置参数。此参数映射到
HealthCheck
的 创建容器 部分中的 Docker Remote API,以及 HEALTHCHECK
docker run 的. 参数。 注意 Amazon ECS 容器代理仅监控和报告在任务定义中指定的运行状况检查。Amazon ECS 不监控嵌入到容器映像中和未在容器定义中指定的 Docker 运行状况检查。在容器定义中指定的运行状况检查参数覆盖容器映像中存在的任意 Docker 运行状况检查。
您可以使用 DescribeTasks API 操作或在 控制台中查看任务详细信息时,查看单个容器和任务的运行状况。
下面介绍了容器的
healthStatus
可能值:-
HEALTHY
— 容器运行状况检查已成功通过。 -
UNHEALTHY
— 容器运行状况检查失败。 -
UNKNOWN
— 正在评估容器运行状况检查,或者没有定义容器运行状况检查。
下面介绍了任务的
healthStatus
可能值。非基本容器的容器运行状况检查状态不会影响任务的运行状况。-
HEALTHY
— 任务中的所有基本容器都通过了其运行状况检查。 -
UNHEALTHY
— 一个或多个基本容器未通过运行状况检查。 -
UNKNOWN
— 任务中的基本容器仍在评估其运行状况检查,或者没有定义容器运行状况检查。
如果任务是手动运行的,而不是作为服务的一部分运行,则该任务将继续其生命周期,而无论其运行状况如何。对于属于服务的任务,如果任务报告为运行状况不佳,则该任务将停止,服务计划程序将替换它。
以下是有关容器运行状况检查支持的注意事项:
-
容器运行状况检查需要 Amazon ECS 容器代理版本 1.17.0 或更高版本。有关更多信息,请参阅更新 Amazon ECS 容器代理.
-
如果使用平台版本 1.1.0 或更高版本,则 Fargate 任务支持容器运行状况检查。有关更多信息,请参阅AWS Fargate 平台版本.
-
如果任务属于配置为使用 的服务的一部分,则此类任务不支持容器运行状况检查。传统负载均衡器.
command
-
一个表示容器运行的命令的字符串数组,用于确定其运行状况是否正常。字符串数组可以以
CMD
开头以直接执行命令参数,或者以CMD-SHELL
开头以使用容器的默认 Shell 来运行命令。如果两者都未指定,将默认使用CMD
在 AWS 管理控制台中注册任务定义时,请使用命令的逗号分隔列表,这些命令在创建任务定义后将自动转换为字符串。运行状况检查的示例输入可以是:
CMD-SHELL, curl -f http://localhost/ || exit 1
在使用 AWS 管理控制台 JSON 面板AWS CLI、 或 注册任务定义时APIs,您应将命令列表括在括号中。运行状况检查的示例输入可以是:
[ "CMD-SHELL", "curl -f http://localhost/ || exit 1" ]
退出代码 0 表示成功,非零退出代码表示失败。有关更多信息,请参阅
HealthCheck
的创建容器部分中的 Docker Remote API. interval
-
执行每次运行状况检查间隔的时间,以秒为单位。您可以指定 5 到 300 秒之间的值。默认值为 30 秒。
timeout
-
等待运行状况检查成功执行的时间长度,以秒为单位,超过该时间则视为失败。您可以指定 2 到 60 秒之间的值。默认值为 5 秒。
retries
-
重试失败的运行状况检查的次数,超过该次数将容器视为不正常。您可以指定 1 到 10 秒之间的重试次数。默认值为三次重试。
startPeriod
-
可选的宽限期,这让容器有时间来引导,不将失败的运行状况检查计数计入最大重试次数中。您可以指定 0 到 300 秒之间的值。默认情况下禁用
startPeriod
-
Environment
cpu
-
类型:整数
必需:否
cpu
容器代理将为容器预留的 Amazon ECS 单元的数量。此参数将映射到 的CpuShares
部分创建容器中的 Docker Remote API和 的 --cpu-shares
docker run选项。 此字段对于使用 Fargate 启动类型的任务为可选,而且唯一的要求是任务内为所有容器保留的 CPU 总量低于任务级
cpu
值。注意 您可以通过将 Amazon EC2Amazon EC2 实例详细信息页面上列出的每个vCPUs实例类型的 CPU 单元数乘以 1024 来确定该实例类型可用的 CPU
单元数。 Linux 容器会按照与其分配的量相同的比例,与容器实例上的其他容器共享未分配的 CPU 单元。例如,如果您在单核实例类型上运行一个单容器任务,同时为该容器指定 512 个 CPU 单元,而且这是在容器实例上运行的唯一任务,则该容器可在任何给定间使用完整的 1024 个 CPU 单元份额。但是,如果您在该容器实例上启动了同一任务的另一个副本,则保证为每个任务提供最少 512 个 CPU 单元(如果需要),而且每个容器的 CPU 使用量会上浮到更高的值(如果另一容器未在使用它),但如果两个任务都始终处于完全活动状态,则它们将限于 512 个 CPU 单元。
在 Linux 容器实例上,容器实例上的 Docker 守护程序使用 CPU 值来计算正在运行的容器的相对 CPU 共享比例。有关更多信息,请参阅 Docker 文档中的 CPU 共享约束
。Linux 内核允许的最小有效 CPU 共享值为 2。不过,CPU 参数不是必需的,您可以在容器定义中使用小于 2 的 CPU 值。对于小于 2 的 CPU 值(包括 null),此行为因您的 Amazon ECS 容器代理版本而异: -
代理版本 <= 1.1.0:Null 和零 CPU 值将作为 0 传递给 Docker,然后 Docker 将其转换为 1,024 个 CPU 份额。CPU 值 1 将作为 1 传递给 Docker,然后 Linux 内核将其转换为 2 个 CPU 份额。
-
代理版本 >= 1.2.0:Null、零和 CPU 值 1 将作为 2 个 CPU 份额传递给 Docker。
在 Windows 容器实例上,此 CPU 限制将作为绝对限制或配额强制实施。Windows 容器只能访问任务定义中定义的指定数量的 CPU。Null 或零 CPU 值作为
0
传递给 Docker,Windows 将其解释为一个 CPU 的 1%。 -
gpu
-
类型:ResourceRequirement对象
必需:否
GPUs
容器代理将为容器预留的物理 Amazon ECS 的数量。为任务中的所有容器GPUs预留的数量不应超过启动任务的容器实例GPUs上的可用数量。有关更多信息,请参阅在 GPUs 上使用 Amazon ECS.注意 使用 Fargate 启动类型的 Windows 容器或任务不支持此参数。
essential
-
类型:布尔值
必需:否
如果将容器的
essential
参数标记为true
,并且该容器出于任何原因发生故障或停止,则属于此任务的所有其他容器将停止。如果将容器的essential
参数标记为false
,则容器发生故障不会影响任务中的剩余容器。如果省略此参数,则假定容器是主要容器。所有任务都必须具有至少一个主要容器。如果您有一个由多个容器组成的应用程序,则应将用于相同目的的容器分成多个组件,然后将不同的组件分为多个任务定义。有关更多信息,请参阅应用程序架构.
"essential": true|false
entryPoint
-
重要 Amazon ECS 容器代理的早期版本无法正确处理
entryPoint
参数。如果您在使用entryPoint
时遇到问题,请更新您的容器代理或改为输入命令和参数作为command
数组项。类型:字符串数组
必需:否
传递给容器的入口点。此参数将映射到 的
Entrypoint
部分创建容器中的 Docker Remote API和 的 --entrypoint
docker run选项。 有关 Docker ENTRYPOINT
参数的更多信息,请转到 https://docs.docker.com/engine/reference/builder/#entrypoint。 "entryPoint": ["string", ...]
command
-
类型:字符串数组
必需:否
传递给容器的命令。此参数将映射到 的
Cmd
部分创建容器中的 Docker Remote API和 COMMAND
参数。 docker run有关 Docker CMD
参数的更多信息,请转到 https://docs.docker.com/engine/reference/builder/#cmd。如果有多个参数,则每个参数应该是数组中的分隔字符串。 "command": ["string", ...]
workingDirectory
-
类型:字符串
必需:否
容器中用于运行命令的工作目录。此参数将映射到 的
WorkingDir
部分创建容器中的 Docker Remote API和 的 --workdir
docker run选项。 "workingDirectory": "string"
environmentFiles
-
类型:对象数组
必需:否
包含要传递到容器的环境变量的文件列表。此参数可将
--env-file
选项映射到 docker run. 您最多可以指定十个环境文件。文件必须具有
.env
文件扩展名。环境文件中的每一行都应包含VARIABLE=VALUE
格式的环境变量。以开头的行#
被视为注释并会被忽略。有关环境变量文件语法的更多信息,请参阅在文件中声明默认环境变量. 如果在容器定义中指定了单个环境变量,则这些变量的优先级高于环境文件中包含的变量。如果指定了多个包含相同变量的环境文件,则会按从上到下的顺序处理这些文件。建议使用唯一的变量名称。有关更多信息,请参阅指定环境变量.
此字段对使用 Fargate 启动类型的任务中的容器无效。
value
-
类型:字符串
必需:是
包含环境变量文件的 Amazon S3 对象的 Amazon 资源名称 (ARN)。
type
-
类型:字符串
必需:是
要使用的文件类型 是唯一受支持的值。
s3
.
environment
-
类型:对象数组
必需:否
要传递给容器的环境变量。此参数将映射到 的
Env
部分创建容器中的 Docker Remote API和 的 --env
docker run选项。 重要 建议不要对敏感信息(如凭证数据)使用纯文本环境变量。
name
-
类型:字符串
必需:是,当使用
environment
时环境变量的名称。
value
-
类型:字符串
必需:是,当使用
environment
时环境变量的值。
"environment" : [ { "name" : "string", "value" : "string" }, { "name" : "string", "value" : "string" } ]
secrets
-
类型:对象数组
必需:否
一个表示用于对您的容器开放的密钥的对象。有关更多信息,请参阅指定敏感数据.
name
-
类型:字符串
必需:是
要在容器上设置为环境变量的值。
valueFrom
-
类型:字符串
必需:是
要向容器公开的密钥。支持的值为 AWS Secrets Manager 密钥的完整 ARN 或 AWS Systems Manager Parameter Store 中的参数的完整 ARN。
注意 如果 Systems Manager Parameter Store 参数存在于要启动的任务所在的区域,则可以使用密钥的完整 ARN 或名称。如果参数存在于不同的区域,则必须指定完整的 ARN。
"secrets": [ { "name": "environment_variable_name", "valueFrom": "arn:aws:ssm:
region
:aws_account_id
:parameter/parameter_name
" } ]
网络设置
disableNetworking
-
类型:布尔值
必需:否
当此参数设置为 true 时,容器内禁用联网。此参数将映射到
NetworkDisabled
的创建容器部分中的 Docker Remote API. 注意 使用
awsvpc
网络模式的 Windows 容器或任务不支持此参数。"disableNetworking": true|false
links
-
类型:字符串数组
必需:否
link
参数允许容器相互进行通信,而无需端口映射。仅当任务定义的网络模式设置为 时才支持bridge
。name:internalName
构造类似于 Docker 链接name:alias
中的 。 最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。有关链接 Docker 容器的更多信息,请转到 https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/. 此参数将映射到 的 Links
部分创建容器中的 Docker Remote API和 的 --link
docker run选项。 注意 使用
awsvpc
网络模式的 Windows 容器或任务不支持此参数。重要 在同一容器实例上并置的容器也许能够相互进行通信,而无需链接或主机端口映射。容器实例上的网络隔离由安全组和 VPC 设置控制。
"links": ["name:internalName", ...]
hostname
-
类型:字符串
必需:否
要对您的容器使用的主机名。此参数将映射到 的
Hostname
部分创建容器中的 Docker Remote API和 的 --hostname
docker run选项。 注意 如果使用
hostname
网络模式,则不支持awsvpc
参数。"hostname": "string"
dnsServers
-
类型:字符串数组
必需:否
提供给容器的 DNS 服务器的列表。此参数将映射到 的
Dns
部分创建容器中的 Docker Remote API和 的 --dns
docker run选项。 注意 使用
awsvpc
网络模式的 Windows 容器或任务不支持此参数。"dnsServers": ["string", ...]
dnsSearchDomains
-
类型:字符串数组
必需:否
模式:^[a-zA-Z0-9-.]{0,253}[a-zA-Z0-9]$
提供给容器的 DNS 搜索域的列表。此参数将映射到 的
DnsSearch
部分创建容器中的 Docker Remote API和 的 --dns-search
docker run选项。 注意 使用
awsvpc
网络模式的 Windows 容器或任务不支持此参数。"dnsSearchDomains": ["string", ...]
extraHosts
-
类型:对象数组
必需:否
要追加到容器上的
/etc/hosts
文件的主机名和 IP 地址映射的列表。此参数将映射到 的
ExtraHosts
部分创建容器中的 Docker Remote API和 的 --add-host
docker run选项。 注意 使用
awsvpc
网络模式的 Windows 容器或任务不支持此参数。"extraHosts": [ { "hostname": "string", "ipAddress": "string" } ... ]
hostname
-
类型:字符串
必需:是,当使用
extraHosts
时要用于
/etc/hosts
条目中的主机名。 ipAddress
-
类型:字符串
必需:是,当使用
extraHosts
时要用于
/etc/hosts
条目中的 IP 地址。
存储和日志记录
readonlyRootFilesystem
-
类型:布尔值
必需:否
当此参数为 true 时,将对此容器提供对其根文件系统的只读访问权。此参数将映射到 的
ReadonlyRootfs
部分创建容器中的 Docker Remote API和 的 --read-only
docker run选项。 注意 Windows 容器不支持此参数。
"readonlyRootFilesystem": true|false
mountPoints
-
Type: Object Array
Required: No
The mount points for data volumes in your container.
This parameter maps to
Volumes
in the 创建容器 section of the Docker Remote APIand the --volume
option to docker run. Windows containers can mount whole directories on the same drive as
$env:ProgramData
. Windows containers cannot mount directories on a different drive, and mount point cannot be across drives.sourceVolume
-
Type: String
Required: Yes, when
mountPoints
are usedThe name of the volume to mount.
containerPath
-
Type: String
Required: Yes, when
mountPoints
are usedThe path on the container to mount the volume at.
readOnly
-
Type: Boolean
Required: No
If this value is
true
, the container has read-only access to the volume. If this value isfalse
, then the container can write to the volume. The default value isfalse
.
volumesFrom
-
类型:对象数组
必需:否
要从其他容器挂载的数据卷。此参数将映射到 的
VolumesFrom
部分创建容器中的 Docker Remote API和 的 --volumes-from
docker run选项。 sourceContainer
-
类型:字符串
必需:是,当使用
volumesFrom
时要从其中挂载卷的容器的名称。
readOnly
-
类型:布尔值
必需:否
如果此值为
true
,则容器具有对卷的只读访问权。如果此值为false
,则容器可对卷进行写入。默认值为false
。
"volumesFrom": [ { "sourceContainer": "string", "readOnly": true|false } ]
logConfiguration
-
类型:LogConfiguration对象
必需:否
容器的日志配置规范。
有关使用日志配置的示例任务定义,请参阅示例任务定义.
此参数将映射到 的
LogConfig
部分创建容器中的 Docker Remote API和 的 --log-driver
docker run
选项。 默认情况下,容器使用与 Docker 守护程序相同的日志记录驱动程序;但是,容器可以通过在容器定义中使用此参数指定日志驱动程序来使用不同于 Docker 守护程序的日志记录驱动程序。要对容器使用不同的日志记录驱动程序,必须在容器实例上正确配置日志系统(或者在不同的日志服务器上使用远程日志记录选项)。有关不同支持的日志驱动程序选项的更多信息,请参阅 Docker 文档中的配置日志记录驱动程序 。 指定容器的日志配置时,应注意以下事项:
-
Amazon ECS 目前支持提供给 Docker 守护程序的一小部分日志记录驱动程序(如以下有效值所示)。可能会在 Amazon ECS 容器代理的未来版本中提供其他日志驱动程序。
-
此参数要求您容器实例上的 Docker Remote API 版本为 1.18 或更高版本。
-
对于使用 EC2 启动类型的任务,在容器实例上运行的 Amazon ECS 容器代理必须先将该实例上的可用日志记录驱动程序注册到
ECS_AVAILABLE_LOGGING_DRIVERS
环境变量,然后该实例上的容器才能使用这些日志配置选项。有关更多信息,请参阅Amazon ECS 容器代理配置. -
对于使用 Fargate 启动类型的任务,因为您无权访问托管您的任务的底层基础设施,所以必须在此任务之外安装任何所需的其他软件。例如,Fluentd 输出聚合函数或运行 Logstash 以将 Gelf 日志发送到的远程主机。
"logConfiguration": { "logDriver": "awslogs","fluentd","gelf","json-file","journald","logentries","splunk","syslog","awsfirelens", "options": {"
string
": "string
" ...}, "secretOptions": [{ "name": "string
", "valueFrom": "string
" }] }logDriver
-
类型:字符串
有效值:
"awslogs","fluentd","gelf","json-file","journald","logentries","splunk","syslog","awsfirelens"
必需:是,当使用
logConfiguration
时要用于容器的日志驱动程序。之前列出的有效值是默认情况下 Amazon ECS 容器代理可与之通信的日志驱动程序。
对于使用 Fargate 启动类型的任务,受支持的日志驱动程序为
awslogs
、splunk
和awsfirelens
.对于使用 EC2 启动类型的任务,受支持的日志驱动程序为
awslogs
、fluentd
、gelf
、json-file
、journald
logentries
、syslog
、、splunk
和awsfirelens
。有关在任务定义中使用
awslogs
日志驱动程序以将容器日志发送到 CloudWatch Logs 的更多信息,请参阅使用 awslogs 日志驱动程序.有关使用
awsfirelens
日志驱动程序的更多信息,请参阅自定义日志路由.注意 如果您有未列出的自定义驱动程序,则可以复制 上Amazon ECS可用的 容器代理项目GitHub
,并对其进行自定义以与该驱动程序结合使用。我们鼓励您针对要包含的更改提交提取请求。但是,我们当前不支持运行此软件的修改后副本。 此参数要求您容器实例上的 Docker Remote API 版本为 1.18 或更高。
options
-
类型:字符串到字符串映射
必需:否
要发送到日志驱动程序的配置选项。
此参数要求您容器实例上的 Docker Remote API 版本为 1.19 或更高。
secretOptions
-
类型:对象数组
必需:否
一个对象,表示要传递到日志配置的密钥。有关更多信息,请参阅指定敏感数据.
name
-
类型:字符串
必需:是
要在容器上设置为环境变量的值。
valueFrom
-
类型:字符串
必需:是
要向容器的日志配置公开的密钥。
"logConfiguration": { "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080", "splunk-token": "...", "tag": "...", ... }, "secretOptions": [{ "name": "
splunk-token
", "valueFrom": "/ecs/logconfig/splunkcred
" }] }
-
firelensConfiguration
-
必需:否
容器FireLens的配置。这用于为容器日志指定和配置日志路由器。有关更多信息,请参阅自定义日志路由.
{ "firelensConfiguration": { "type": "fluentd", "options": { "KeyName": "" } } }
options
-
类型:字符串到字符串映射
必需:否
在配置日志路由器时使用的选项。此字段是可选的,可用于指定自定义配置文件或将其他元数据(如任务、任务定义、集群和容器实例详细信息)添加到日志事件。如果指定,则要使用的语法为
"options":{"enable-ecs-log-metadata":"true|false","config-file-type:"s3|file","config-file-value":"arn:aws:s3:::mybucket/fluent.conf|filepath"}
。 有关更多信息,请参阅创建使用 FireLens 配置的任务定义。 type
-
类型:字符串
必需:是
要使用的日志路由器。有效值为
fluentd
或fluentbit
.
Security
privileged
-
类型:布尔值
必需:否
当该参数为 true 时,将对此容器提供对主机容器实例的提升的特权(类似于
root
用户)。此参数将映射到 的
Privileged
部分创建容器中的 Docker Remote API和 的 --privileged
docker run选项。 注意 使用 Fargate 启动类型的 Windows 容器或任务不支持此参数。
"privileged": true|false
user
-
类型:字符串
必需:否
要在容器内使用的用户。此参数将映射到 的
User
部分创建容器中的 Docker Remote API和 的 --user
docker run选项。 重要 使用
host
网络模式运行任务时,不应使用 root 用户 (UID 0) 运行容器。使用非 root 用户被认为是最佳实践。您可以使用以下格式指定
user
如果指定 UID 或 GID,您必须将其指定为一个正整数。-
user
-
user:group
-
uid
-
uid:gid
-
user:gid
-
uid:group
注意 Windows 容器不支持此参数。
"user": "string"
-
dockerSecurityOptions
-
类型:字符串数组
有效值:"no-new-privileges" | "apparmor:PROFILE" | "label:
value
" | "credentialspec:CredentialSpecFilePath
"必需:否
为 SELinux 和AppArmor多级安全系统提供自定义标签的字符串列表。有关有效值的更多信息,请参阅 Docker 运行安全配置
. 此字段对使用 Fargate 启动类型的任务中的容器无效。 对于 Windows 容器,此参数可用于在为 Active Directory 身份验证配置容器时引用凭证规范文件。有关更多信息,请参阅Windows容器使用gMSA.
此参数将映射到 的
SecurityOpt
部分创建容器中的 Docker Remote API和 的 --security-opt
docker选项。 "dockerSecurityOptions": ["string", ...]
注意 在容器实例上运行的 Amazon ECS 容器代理必须先注册到
ECS_SELINUX_CAPABLE=true
或ECS_APPARMOR_CAPABLE=true
环境变量,然后该实例上的容器才能使用这些安全选项。有关更多信息,请参阅Amazon ECS 容器代理配置.
资源限制
ulimits
-
类型:对象数组
必需:否
要为容器定义的
ulimit
值的列表。此值将覆盖操作系统的默认资源限制设置。此参数将映射到 的Ulimits
部分创建容器中的 Docker Remote API和 的 --ulimit
docker run选项。 Fargate 上托管的 Amazon ECS 任务使用由操作系统设置的默认资源限制值,但
nofile
资源限制参数除外,Fargate 覆盖该参数。nofile
资源限制对容器可以使用的打开文件数量设置限制。默认的nofile
软限制为1024
,硬限制为4096
。 有关更多信息,请参阅任务资源限制。此参数要求您容器实例上的 Docker Remote API 版本为 1.18 或更高。
注意 Windows 容器不支持此参数。
"ulimits": [ { "name": "core"|"cpu"|"data"|"fsize"|"locks"|"memlock"|"msgqueue"|"nice"|"nofile"|"nproc"|"rss"|"rtprio"|"rttime"|"sigpending"|"stack", "softLimit": integer, "hardLimit": integer } ... ]
name
-
类型:字符串
有效值:
"core" | "cpu" | "data" | "fsize" | "locks" | "memlock" | "msgqueue" | "nice" | "nofile" | "nproc" | "rss" | "rtprio" | "rttime" | "sigpending" | "stack"
必需:是,当使用
ulimits
时type
的ulimit
。 hardLimit
-
类型:整数
必需:是,当使用
ulimits
时ulimit
类型的硬限制。 softLimit
-
类型:整数
必需:是,当使用
ulimits
时ulimit
类型的软限制。
Docker 标签
dockerLabels
-
类型:字符串到字符串映射
必需:否
要添加到容器的标签的键值映射。此参数将映射到 的
Labels
部分创建容器中的 Docker Remote API和 的 --label
docker run选项。 此参数要求您容器实例上的 Docker Remote API 版本为 1.18 或更高。
"dockerLabels": {"string": "string" ...}
其他容器定义参数
以下容器定义参数可在控制台中注册任务定义时使用Amazon ECS,方法是使用 Configure via JSON (通过 JSON 配置) 选项。有关更多信息,请参阅创建任务定义.
Linux 参数
linuxParameters
-
类型:LinuxParameters对象
必需:否
应用于容器的特定于 Linux 的选项,例如 KernelCapabilities 。
注意 Windows 容器不支持此参数。
"linuxParameters": { "capabilities": { "add": ["string", ...], "drop": ["string", ...] } }
capabilities
-
类型:KernelCapabilities对象
必需:否
容器的 Linux 功能,这些功能已在 Docker 提供的默认配置中添加或删除。有关默认功能和非默认的可用功能,请参阅 Docker 运行参考
中的运行时特权和 Linux 功能. 有关这些 Linux 功能的更多详细信息,请参阅 capabilities(7) Linux 手册页面。 add
-
类型:字符串数组
有效值:
"ALL" | "AUDIT_CONTROL" | "AUDIT_READ" | "AUDIT_WRITE" | "BLOCK_SUSPEND" | "CHOWN" | "DAC_OVERRIDE" | "DAC_READ_SEARCH" | "FOWNER" | "FSETID" | "IPC_LOCK" | "IPC_OWNER" | "KILL" | "LEASE" | "LINUX_IMMUTABLE" | "MAC_ADMIN" | "MAC_OVERRIDE" | "MKNOD" | "NET_ADMIN" | "NET_BIND_SERVICE" | "NET_BROADCAST" | "NET_RAW" | "SETFCAP" | "SETGID" | "SETPCAP" | "SETUID" | "SYS_ADMIN" | "SYS_BOOT" | "SYS_CHROOT" | "SYS_MODULE" | "SYS_NICE" | "SYS_PACCT" | "SYS_PTRACE" | "SYS_RAWIO" | "SYS_RESOURCE" | "SYS_TIME" | "SYS_TTY_CONFIG" | "SYSLOG" | "WAKE_ALARM"
必需:否
容器的 Linux 功能,这些功能将添加到 Docker 提供的默认配置。此参数将映射到
CapAdd
的创建容器部分中的 Docker Remote API和 --cap-add
docker run 的. 选项。 注意 在 上启动的任务Fargate仅支持添加
SYS_PTRACE
内核功能。 drop
-
类型:字符串数组
有效值:
"ALL" | "AUDIT_CONTROL" | "AUDIT_WRITE" | "BLOCK_SUSPEND" | "CHOWN" | "DAC_OVERRIDE" | "DAC_READ_SEARCH" | "FOWNER" | "FSETID" | "IPC_LOCK" | "IPC_OWNER" | "KILL" | "LEASE" | "LINUX_IMMUTABLE" | "MAC_ADMIN" | "MAC_OVERRIDE" | "MKNOD" | "NET_ADMIN" | "NET_BIND_SERVICE" | "NET_BROADCAST" | "NET_RAW" | "SETFCAP" | "SETGID" | "SETPCAP" | "SETUID" | "SYS_ADMIN" | "SYS_BOOT" | "SYS_CHROOT" | "SYS_MODULE" | "SYS_NICE" | "SYS_PACCT" | "SYS_PTRACE" | "SYS_RAWIO" | "SYS_RESOURCE" | "SYS_TIME" | "SYS_TTY_CONFIG" | "SYSLOG" | "WAKE_ALARM"
必需:否
容器的 Linux 功能,这些功能将从 Docker 提供的默认配置中删除。此参数将映射到
CapDrop
的创建容器部分中的 Docker Remote API和 --cap-drop
docker run 的. 选项。
devices
-
对容器公开的任何主机设备。此参数将映射到
Devices
的创建容器部分中的 Docker Remote API和 --device
docker run 的. 选项。 注意 如果您使用的任务使用 Fargate 启动类型,则不支持
devices
参数。类型:设备对象数组
必需:否
hostPath
-
主机容器实例上的设备路径。
类型:字符串
必需:是
containerPath
-
向主机设备公开的容器内的路径。
类型:字符串
必需:否
permissions
-
提供给设备的容器的显式权限。默认情况下,容器对设备上的
read
、write
和mknod
具有权限。类型:字符串数组
有效值:
read
|write
|mknod
initProcessEnabled
-
在容器内运行
init
进程,转发信号和获得进程。此参数会将--init
选项映射到 docker run. 此参数要求您容器实例上的 Docker Remote API 版本为 1.25 或更高。
maxSwap
-
MiB容器可以使用的交换内存总量(在 中)。此参数将转换为
--memory-swap
docker run的 选项,其中 值将是容器内存加 maxSwap
值的总和。如果指定
maxSwap
值为0
,则该容器将不使用交换。接受的值为0
或任何正整数。如果省略maxSwap
参数,该容器将为其运行所在的容器实例使用交换配置。必须为要使用的maxSwap
参数设置swappiness
值。注意 如果您使用的任务使用 Fargate 启动类型,则不支持
maxSwap
参数。 sharedMemorySize
-
MiB
/dev/shm
卷的大小值 (在 中)。此参数会将--shm-size
选项映射到 docker run. 注意 如果您使用的任务使用 Fargate 启动类型,则不支持
sharedMemorySize
参数。类型:整数
swappiness
-
使用此参数,您可以调整容器的内存 swappiness 行为。除非绝对必要,否则
swappiness
值为0
将导致交换不会发生。swappiness
值为100
将导致页面被非常积极地交换。接受的值是0
和 之间的整数100
。 如果未指定swappiness
参数60
,则使用默认值 。如果未指定maxSwap
的值,则此参数将被忽略。此参数会将--memory-swappiness
选项映射到 docker run. 注意 如果您使用的任务使用 Fargate 启动类型,则不支持
swappiness
参数。 tmpfs
-
tmpfs 挂载的容器路径、挂载选项和最大大小(以 MiB 为单位)。此参数会将
--tmpfs
选项映射到 docker run. 注意 如果您使用的任务使用 Fargate 启动类型,则不支持
tmpfs
参数。类型:Tmpfs 对象数组
必需:否
containerPath
-
要挂载 tmpfs 卷的绝对文件路径。
类型:字符串
必需:是
mountOptions
-
tmpfs 卷挂载选项列表。
类型:字符串数组
必需:否
有效值:
"defaults" | "ro" | "rw" | "suid" | "nosuid" | "dev" | "nodev" | "exec" | "noexec" | "sync" | "async" | "dirsync" | "remount" | "mand" | "nomand" | "atime" | "noatime" | "diratime" | "nodiratime" | "bind" | "rbind" | "unbindable" | "runbindable" | "private" | "rprivate" | "shared" | "rshared" | "slave" | "rslave" | "relatime" | "norelatime" | "strictatime" | "nostrictatime" | "mode" | "uid" | "gid" | "nr_inodes" | "nr_blocks" | "mpol"
size
-
tmpfs 卷的最大大小(以 MiB为单位)。
类型:整数
必需:是
容器依赖项
dependsOn
-
类型:ContainerDependency对象数组
必需:否
针对容器启动和关闭定义的依赖项。一个容器可以包含多个依赖项。当针对容器启动定义依赖项时,对于容器关闭,将反转此项。有关示例,请参阅示例:容器从属性.
注意 如果容器不满足依赖项约束或在满足约束之前超时Amazon ECS,则 不会将依赖容器进入其下一个状态。
对于在 Amazon ECS 实例上托管Amazon EC2的任务,实例至少需要容器代理
1.26.0
的 版本才能启用容器依赖项。但是,我们建议使用最新的容器代理版本。有关检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理. 如果您使用的是 Amazon ECS-optimized Amazon Linux AMI,则您的实例至少需要1.26.0-1
版本的ecs-init
程序包。如果您的容器实例是从 版本20190301
或更高版本启动的,则它们包含所需版本的容器代理和ecs-init
。 有关更多信息,请参阅Amazon ECS-optimized AMIs。对于托管在 上的Amazon ECS任务Fargate,此参数要求任务或服务使用 平台版本
1.3.0
或更高版本。"dependsOn": [ { "containerName": "
string
", "condition": "string
" } ]containerName
-
类型:字符串
必需:是
必须符合指定条件的容器名称。
condition
-
类型:字符串
必需:是
容器的依赖项条件。以下是可用的条件及其行为:
-
START
– 此条件将立即模拟链接和卷的行为。它将验证从属容器是否是在允许其他容器启动前启动的。 -
COMPLETE
– 此条件将验证从属容器是否在允许其他容器启动前运行完成(退出)。这对于运行脚本然后退出的非主要容器非常有用。无法在基本容器上设置此条件。 -
SUCCESS
– 此条件与COMPLETE
相同,但它还要求容器退出并具有zero
状态。无法在基本容器上设置此条件。 -
HEALTHY
– 此条件将验证从属容器是否在允许其他容器启动前传递其 Docker 运行状况检查。这要求从属容器已配置运行状况检查。仅在任务启动时确认此条件。
-
容器超时
startTimeout
-
类型:整数
必需:否
示例值:
120
在放弃解析容器的依赖项之前要等待的持续时间(以秒为单位)。
例如,您在任务定义中指定两个容器,并且
containerA
其依赖项是containerB
达到COMPLETE
、SUCCESS
或HEALTHY
状态。如果为 指定了startTimeout
值containerB
,并且它在该时间内未达到所需的状态,则containerA
将放弃且不开始。注意 如果容器不满足依赖项约束或在满足约束之前超时Amazon ECS,则 不会将依赖容器进入其下一个状态。
对于在 上托管Amazon ECS的任务Fargate,此参数要求任务或服务使用 平台版本
1.3.0
或更高版本。使用平台版本 时1.4.0
,如果未指定此参数,则使用默认值60
秒。 stopTimeout
-
类型:整数
必需:否
示例值:
120
容器由于未自行正常退出而被强制终止前要等待的持续时间(以秒为单位)。
对于使用 Fargate 启动类型的任务,任务或服务需要使用 1.3.0 版或更高版本的平台。最大停止超时值为 120 秒,如果未指定此参数,则使用默认值 30 秒。
对于使用 EC2 启动类型的任务,如果未指定
stopTimeout
参数,则默认情况下使用为 Amazon ECS 容器代理配置变量ECS_CONTAINER_STOP_TIMEOUT
设置的值。如果既没有设置stopTimeout
参数,也没有设置ECS_CONTAINER_STOP_TIMEOUT
代理配置变量,那么,对于 Linux 容器,使用默认值 30 秒;对于 Windows 容器,使用默认值 30 秒。容器实例需要至少 1.26.0 版的容器代理才能启用容器停止超时值。但是,我们建议使用最新的容器代理版本。有关检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理. 如果您使用 Amazon ECS-optimized Amazon Linux AMI,您的实例至少需要 1.26.0-1 版的ecs-init
程序包。如果您的容器实例是从 版本20190301
或更高版本启动的,则它们包含所需版本的容器代理和ecs-init
。 有关更多信息,请参阅Amazon ECS-optimized AMIs。
系统控制
systemControls
-
类型:SystemControl对象
必需:否
要在容器中设置的具有命名空间的内核参数的列表。此参数将映射到 的
Sysctls
部分创建容器中的 Docker Remote API和 的 --sysctl
docker run选项。 不建议在使用了
systemControls
或awsvpc
网络模式的单个任务中为多个容器指定与网络相关的host
参数,原因如下:-
对于使用
awsvpc
网络模式的任务,如果为任何容器设置了systemControls
,则它将应用于该任务中的所有容器。如果您为单个任务中的多个容器设置了不同的systemControls
,最后启动的容器将确定哪个systemControls
生效。 -
对于使用
host
网络模式的任务,不支持网络命名空间systemControls
如果您要设置 IPC 资源命名空间以用于任务中的容器,则以下内容将适用于您的系统控制。有关更多信息,请参阅IPC 模式.
-
对于使用
host
IPC 模式的任务,不支持 IPC 命名空间systemControls
-
对于使用
task
IPC 模式的任务,IPC 命名空间systemControls
值将适用于任务中的所有容器。
注意 使用 Fargate 启动类型的 Windows 容器或任务不支持此参数。
"systemControls": [ { "namespace":"
string
", "value":"string
" } ]namespace
-
类型:字符串
必需:否
需要为其设置
value
的具有命名空间的内核参数。有效 IPC 命名空间值:
"kernel.msgmax" | "kernel.msgmnb" | "kernel.msgmni" | "kernel.sem" | "kernel.shmall" | "kernel.shmmax" | "kernel.shmmni" | "kernel.shm_rmid_forced"
,以及以"fs.mqueue.*"
开头的 Sysctls有效网络命名空间值:以 开头的 Sysctls
"net.*"
value
-
类型:字符串
必需:否
在 中指定的具有命名空间的内核参数的值。
namespace
.
-
Interactive
interactive
-
类型:布尔值
必需:否
当此参数为
true
时,您可以部署需要分配 stdin 或 tty 的容器化的应用程序。此参数将映射到 的OpenStdin
部分创建容器中的 Docker Remote API和 的 --interactive
docker run选项。
伪终端
pseudoTerminal
-
类型:布尔值
必需:否
当此参数为
true
时,则分配 TTY。此参数将映射到 的Tty
部分创建容器中的 Docker Remote API和 的 --tty
docker run选项。
Volumes
当您注册任务定义时,可以选择指定一个卷列表,这些卷将传递到容器实例上的 Docker 守护程序,然后它们将变得可供同一容器实例上的其他容器访问。
下面是可使用的数据卷的类型:
-
Docker 卷 — 在主机 Amazon EC2 实例上的
/var/lib/docker/volumes
下创建的 Docker 托管卷。Docker 卷驱动程序(也称为插件)用于将卷与外部存储系统(如 Amazon EBS)集成。可使用内置local
卷驱动程序或第三方卷驱动程序。只有在 Amazon EC2 实例上运行任务时才支持 Docker 卷。Windows 容器仅支持使用 驱动程序。要使用 Docker 卷,请在任务定义中指定 。有关更多信息,请参阅使用卷。 -
绑定挂载 — 主机上的文件或目录将挂载到容器中。在 AWS Fargate 或 Amazon EC2 实例上运行任务时,支持绑定挂载主机卷。要使用绑定挂载主机卷,请在任务定义中指定
sourcePath
和可选的 值。有关更多信息,请参阅使用绑定挂载。
有关更多信息,请参阅在任务中使用数据卷.
容器定义中允许以下参数:
name
-
类型:字符串
必需:否
卷的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。此名称已在容器定义
mountPoints
对象的sourceVolume
参数中引用。 host
-
必需:否
使用绑定装载时将指定此参数。要使用 Docker 卷,请改为指定
dockerVolumeConfiguration
。host
参数的内容确定您的绑定装载数据卷是否一直保存在主机容器实例上以及存储它的位置上。如果host
参数为空,则 Docker 守护程序将为您的数据卷分配一个主机路径,但不保证数据在与其关联的容器停止运行后将保留。当使用 EC2 或 Fargate 启动类型时,支持绑定装载主机卷。
Windows 容器可在
$env:ProgramData
所在的驱动器上装载整个目录。sourcePath
-
类型:字符串
必需:否
在使用
host
参数时,指定sourcePath
可声明提供给容器的主机容器实例上的路径。如果该参数为空,则 Docker 守护程序将为您分配一个主机路径。如果host
参数包含sourcePath
文件位置,则数据卷将在主机容器实例上的指定位置保留,除非您手动将其删除。如果主机容器实例上不存在sourcePath
值,则 Docker 守护程序将创建该值。如果该位置不存在,则将导出源路径文件夹的内容。
dockerVolumeConfiguration
-
类型:对象
必需:否
使用 Docker 卷时将指定此参数。只有在 EC2 实例上运行任务时才支持 Docker 卷。Windows 容器仅支持使用 驱动程序。要使用绑定挂载,请改为指定
host
。scope
-
类型:字符串
有效值:
task
|shared
必需:否
Docker 卷的范围,可确定其生命周期。当任务开始时,将自动预置范围限定为
task
的 Docker 卷;而当任务清除时销毁此卷。任务停止后,范围限定为 的 Docker 卷将持续存在。 autoprovision
-
类型:布尔值
默认值:
false
必需:否
如果此值为
true
,则将创建 Docker 卷(如果此卷不存在)。仅在scope
为shared
时使用此字段。如果scope
为task
,则必须省略此参数或将其设置为false
。 driver
-
类型:字符串
必需:否
要使用的 Docker 卷驱动程序。由于驱动程序值用于任务放置,因此,它必须与 Docker 提供的驱动程序名称匹配。如果已使用 Docker 插件 CLI 创建驱动程序,则使用
docker plugin ls
可从容器实例中检索驱动程序名称。如果已使用其他方法创建驱动程序,则使用 Docker 插件发现功能可检索驱动程序名称。有关更多信息,请参阅 Docker 插件发现。此参数映射到 Docker Remote API 的创建卷 部分中的 Driver
和docker volume create
的 --driver
选项。 driverOpts
-
类型:字符串
必需:否
要传递的 Docker 驱动程序特定的选项的映射。此参数映射到 Docker Remote API
的创建卷 部分中的 DriverOpts
和docker volume create
的 --opt
选项。 labels
-
类型:字符串
必需:否
要添加到 Docker 卷的自定义元数据。此参数映射到 Docker Remote API
的创建卷 部分中的 Labels
和docker volume create
的 --label
选项。
efsVolumeConfiguration
-
类型:对象
必需:否
使用 Amazon EFS 卷时将指定此参数。
fileSystemId
-
类型:字符串
必需:是
要使用的 Amazon EFS 文件系统 ID。
rootDirectory
-
类型:字符串
必需:否
Amazon EFS 文件系统中要作为主机内的根目录挂载的目录。如果忽略此参数,将使用 Amazon EFS 卷的根目录。指定
/
与忽略此参数效果相同。重要 如果在
authorizationConfig
中指定了 EFS 访问点,则必须省略根目录值,或者将其设置为/
,以便在 EFS 访问点上强制执行设置的路径。 transitEncryption
-
类型:字符串
有效值:
ENABLED
|DISABLED
必需:否
是否对 Amazon ECS 主机和 Amazon EFS 服务器之间传输的 Amazon EFS 数据启用加密。如果使用 Amazon EFS IAM 授权,则必须启用传输加密。如果忽略此参数,将使用
DISABLED
的默认值。有关更多信息,请参阅 Amazon Elastic File System 用户指南 中的加密传输中的数据。 transitEncryptionPort
-
类型:整数
必需:否
在 Amazon ECS 主机和 Amazon EFS 服务器之间发送加密数据时使用的端口。如果未指定传输加密端口,将使用 Amazon EFS 挂载帮助程序使用的端口选择策略。有关更多信息,请参阅 Amazon Elastic File System 用户指南 中的 EFS 挂载帮助程序。
authorizationConfig
-
类型:对象
必需:否
Amazon EFS 文件系统的授权配置详细信息。
accessPointId
-
类型:字符串
必需:否
要使用的访问点 ID。如果指定了访问点,则必须省略
efsVolumeConfiguration
中的根目录值,或者将其设置为/
,以便在 EFS 访问点上强制执行设置的路径。如果使用访问点,则必须在EFSVolumeConfiguration
中启用传输加密。有关更多信息,请参阅 Amazon Elastic File System 用户指南 中的使用 Amazon EFS 访问点。 iam
-
类型:字符串
有效值:
ENABLED
|DISABLED
必需:否
挂载 Amazon EFS 文件系统时是否使用任务定义中定义的 Amazon ECS 任务 IAM 角色。如果启用,则必须在
EFSVolumeConfiguration
中启用传输加密。如果忽略此参数,将使用DISABLED
的默认值。有关更多信息,请参阅适用于任务的 IAM 角色。
FSxWindowsFileServerVolumeConfiguration
-
类型:对象
必需:是
当您使用 Amazon FSx for Windows File Server 文件系统进行任务存储时,指定此参数。
fileSystemId
-
类型:字符串
必需:是
要使用的 Amazon FSx for Windows File Server 文件系统 ID。
rootDirectory
-
类型:字符串
必需:是
Amazon FSx for Windows File Server 文件系统中要作为主机内的根目录挂载的目录。
authorizationConfig
-
credentialsParameter
-
类型:字符串
必需:是
授权凭证选项。
选项:
-
AWS Secrets Manager 密钥的 Amazon 资源名称 (ARN)。
-
AWS Systems Manager 参数的 ARN。
-
domain
-
类型:字符串
必需:是
由 AWS Directory Service 托管的 Microsoft AD (Active Directory) 或自托管的 EC2 AD 托管的完全限定域名。
任务放置约束
您在注册任务定义时,可以提供任务放置约束,自定义 Amazon ECS 如何放置任务。
如果您使用的是 Fargate 启动类型,则不支持任务放置约束。默认情况下,Fargate 任务分布在可用区中。
对于使用 EC2 启动类型的任务,则可以使用约束来根据可用区、实例类型或自定义属性来放置任务。有关更多信息,请参阅Amazon ECS 任务放置约束.
容器定义中允许以下参数:
expression
-
类型:字符串
必需:否
应用于约束的集群查询语言表达式。有关更多信息,请参阅集群查询语言.
type
-
类型:字符串
必需:是
约束类型。使用
memberOf
将选择限制为一组有效的候选。
启动类型
当您注册任务定义时,您可以指定要用于任务的启动类型。有关更多信息,请参阅Amazon ECS 启动类型.
任务定义中允许以下参数:
requiresCompatibilities
-
类型:字符串数组
必需:否
有效值:
EC2
|FARGATE
任务使用的启动类型。这将启用检查以确保任务定义中使用的所有参数均符合启动类型的要求。
有效值为
FARGATE
和EC2
。 有关启动类型的更多信息,请参阅Amazon ECS 启动类型。
任务大小
注册任务定义时,您可以指定用于任务的总 CPU 和内存量。这独立于容器定义级别的 cpu
和 memory
值。对于在 Amazon EC2 实例上托管的任务,这些字段是可选的。对于托管在 <ph89/> 上的任务,这些字段是必填字段,并且支持 <ph90/> 和 <ph91/>
的特定值。Fargatecpu
memory
Windows 容器将忽略任务级 CPU 和内存参数。我们建议为 Windows 容器指定容器级资源。
任务定义中允许以下参数:
cpu
-
类型:字符串
必需:有条件
注意 Windows 容器不支持此参数。
要为任务提供的 CPU 单位的硬限制。它在任务定义
1024
中可表示为使用 CPU 单元(例如 )的整数vCPUs或使用 的字符串1 vCPU
(例如1 vcpu
或 )。注册任务定义时,vCPU 值将转换为指示 CPU 单元的整数。对于在 Amazon EC2 实例上托管的任务,此字段是可选的。如果您的集群没有任何带可用的已请求 CPU 单位的已注册容器实例,则该任务将失败。支持的值介于
128
CPU 单元 (0.125
vCPUs) 和10240
CPU 单元 (10
) 之间vCPUs。对于在 上托管的任务Fargate,此字段为必填字段,并且您必须使用以下值之一,这决定了
memory
参数支持的值的范围:CPU 值
内存值 (MiB)
256 (.25 vCPU)
512 (0.5GB)、1024 (1GB)、2048 (2GB)
512 (.5 vCPU)
1024 (1GB)、2048 (2GB)、3072 (3GB)、4096 (4GB)
1024 (1 vCPU)
2048 (2GB)、3072 (3GB)、4096 (4GB)、5120 (5GB)、6144 (6GB)、7168 (7GB)、8192 (8GB)
2048 (2 vCPU)
4096 (4GB) 到 16384 (16GB) 之间(以 1024 (1GB) 为增量)
4096 (4 vCPU)
8192 (8GB) 到 30720 (30GB) 之间(以 1024 (1GB) 为增量)
memory
-
类型:字符串
必需:有条件
注意 Windows 容器不支持此参数。
要MiB提供给任务的内存的硬限制(在 中)。它在任务定义中可表示为整数(使用 时MiB,例如
1024
)或字符串(使用 GB 时1GB
,例如1 GB
或 )。注册任务定义时,GB 值将转换为指示 的整数MiB。对于托管在 <ph113/> 实例上的任务,此字段是可选的,并且可使用任何值。Amazon EC2如果指定了任务级内存值,则容器级内存值是可选的。如果您的集群没有任何带可用的已请求内存的已注册容器实例,则该任务将失败。如果您尝试通过为任务提供尽可能多的用于特定实例类型的内存来最大程度地利用资源,请参阅容器实例内存管理.
对于在 上托管的任务Fargate,此字段为必填字段,并且您必须使用以下值之一,这决定了
cpu
参数支持的值的范围:内存值 (MiB)
CPU 值
512 (0.5GB)、1024 (1GB)、2048 (2GB)
256 (.25 vCPU)
1024 (1GB)、2048 (2GB)、3072 (3GB)、4096 (4GB)
512 (.5 vCPU)
2048 (2GB)、3072 (3GB)、4096 (4GB)、5120 (5GB)、6144 (6GB)、7168 (7GB)、8192 (8GB)
1024 (1 vCPU)
4096 (4GB) 到 16384 (16GB) 之间(以 1024 (1GB) 为增量)
2048 (2 vCPU)
8192 (8GB) 到 30720 (30GB) 之间(以 1024 (1GB) 为增量)
4096 (4 vCPU)
代理配置
proxyConfiguration
-
类型:ProxyConfiguration对象
必需:否
App Mesh 代理的配置详细信息。
对于使用 EC2 启动类型的任务,容器实例需要至少 1.26.0 版的容器代理和至少 1.26.0-1 版的
ecs-init
程序包才能启用代理配置。如果您的容器实例是从Amazon ECS经 优化的 AMI 版本20190301
或更高版本启动的,则它们包含所需版本的容器代理和ecs-init
。 有关更多信息,请参阅Amazon ECS-optimized AMIs。对于使用 Fargate 启动类型的任务,此功能需要任务或服务使用平台版本 1.3.0 或更高版本。
注意 Windows 容器不支持此参数。
"proxyConfiguration": { "type": "APPMESH", "containerName": "
string
", "properties": [ { "name": "string
", "value": "string
" } ] }type
-
类型:字符串
值:
APPMESH
必需:否
代理类型。 是唯一受支持的值。
APPMESH
. containerName
-
类型:字符串
必需:是
将作为 App Mesh 代理的容器的名称。
properties
-
类型:KeyValuePair对象数组
必需:否
提供容器网络接口 (CNI) 插件的网络配置参数集,以键值对形式指定。
-
IgnoredUID
– (必需)代理容器的用户 ID (UID),由容器定义中的user
参数定义。此字段用于确保代理会忽略自己的流量。如果指定了IgnoredGID
,此字段可为空。 -
<ph140/> <ph141/> (必需)代理容器的组 ID (GID),由容器定义中的 <ph142/> 参数定义。
IgnoredGID
–user
此字段用于确保代理会忽略自己的流量。如果指定了IgnoredUID
,此字段可为空。 -
AppPorts
–(必填)应用程序使用的端口的列表。发送到这些端口的网络流量将转发到ProxyIngressPort
和ProxyEgressPort
. -
ProxyIngressPort
– (必需)指定传入到 的流量AppPorts
将定向到的端口。 -
ProxyEgressPort
– (必需)指定传出流量AppPorts
将定向到的端口。 -
EgressIgnoredPorts
– (必需)进入这些指定端口的出口流量将被忽略,并且不会重定向到ProxyEgressPort
。 它可以是空列表。 -
EgressIgnoredIPs
– (必需)进入这些指定 IP 地址的出口流量将被忽略,并且不会重定向到ProxyEgressPort
。 它可以是空列表。
name
-
类型:字符串
必需:否
键值对的名称。
value
-
类型:字符串
必需:否
键值对的值。
-
其他任务定义参数
在 Amazon ECS 控制台中注册任务定义时,可以使用以下任务定义参数,方法是使用 Configure via JSON (通过 JSON 配置) 选项。有关更多信息,请参阅创建任务定义.
IPC 模式
ipcMode
-
类型:字符串
必需:否
用于任务中的容器的 IPC 资源命名空间。有效值为
host
、task
或none
。 如果指定host
了 ,则在同一容器实例上指定host
了 IPC 模式的任务中的所有容器将与主机Amazon EC2实例共享相同的 IPC 资源。如果指定了task
,则指定任务中的所有容器将共享相同的 IPC 资源。如果指定了none
,则任务的容器中的 IPC 资源是私有的,不与任务中或容器实例上的其他容器共享。如果未指定任何值,则 IPC 资源命名空间共享取决于容器实例上的 Docker 守护程序设置。有关更多信息,请参阅 Docker 运行参考中的 IPC 设置. 如果使用了
host
IPC 模式,请注意,发生非预期的 IPC 命名空间公开的风险会提高。有关更多信息,请参阅 Docker 安全性. 如果您使用
systemControls
为任务中的容器设置具有命名空间的内核参数,则以下内容将适用于您的 IPC 资源命名空间。有关更多信息,请参阅系统控制.-
对于使用
host
IPC 模式的任务,不支持与 IPC 命名空间相关的systemControls
-
对于使用
task
IPC 模式的任务,与 IPC 命名空间相关的systemControls
将适用于任务中的所有容器。
-
使用 Fargate 启动类型的 Windows 容器或任务不支持此参数。
PID 模式
pidMode
-
类型:字符串
必需:否
用于任务中的容器的过程命名空间。有效值为
host
或task
。 如果指定host
了 ,则在同一容器实例上指定host
了 PID 模式的任务中的所有容器将与主机Amazon EC2实例共享相同的进程命名空间。如果指定了task
,则指定任务中的所有容器将共享相同的过程命名空间。如果未指定任何值,则默认值为私有命名空间。有关更多信息,请参阅 Docker 运行参考中的 PID 设置. 如果使用了
host
PID 模式,请注意,发生非预期的过程命名空间公开的风险会提高。有关更多信息,请参阅 Docker 安全性.
使用 Fargate 启动类型的 Windows 容器或任务不支持此参数。