docker服务创建

描述

创建一个新服务

API 1.24+  客户端和守护程序API都必须至少为 1.24, 才能使用此命令。docker version在客户端上使用命令检查客户端和守护程序API版本。

Swarm此命令与Swarm协调器一起使用。

用法

$ docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

扩展说明

按照指定的参数创建服务。

笔记

这是集群管理命令,必须在集群管理器节点上执行。要了解管理人员和工作人员,请参阅文档中的“ 群集模式”部分

有关此命令的示例用法,请参阅下面的示例部分

选项

名称,简写 默认 描述
--cap-add API 1.41+
添加Linux功能
--cap-drop API 1.41+
Drop Linux功能
--config API 1.30+
指定要向服务公开的配置
--constraint 放置约束
--container-label 容器标签
--credential-spec
适用于托管服务帐户的API 1.29+凭据规范(仅Windows)
--detach-d API 1.29+
立即退出,而不是等待服务收敛
--dns API 1.25+
设置自定义DNS服务器
--dns-option API 1.25+
设置DNS选项
--dns-search API 1.25+
设置自定义DNS搜索域
--endpoint-mode vip 端点模式(vip或dnsrr)
--entrypoint 覆盖图像的默认ENTRYPOINT
--env-e 设置环境变量
--env-file 读入环境变量文件
--generic-resource 用户定义的资源
--group API 1.25+
为容器设置一个或多个补充用户组
--health-cmd API 1.25+
命令运行以检查运行状况
--health-interval API 1.25+
运行检查之间的时间(ms | s | m | h)
--health-retries
需要报告API 1.25以上的API 1.25+连续故障
--health-start-period API 1.29+
容器初始化的开始时间,然后计算对不稳定的重试次数(ms | s | m | h)
--health-timeout API 1.25+
允许执行一次检查的最长时间(ms | s | m | h)
--host API 1.25+
设置一个或多个自定义主机到IP的映射(host:ip)
--hostname API 1.25+
容器主机名
--init API 1.37+
在每个服务容器中使用init来转发信号并获取进程
--isolation API 1.35+
服务容器隔离模式
--label-l 服务标签
--limit-cpu 限制CPU
--limit-memory 限制记忆
--limit-pids API 1.41+ Swarm
Limit最大进程数(默认0 =无限)
--log-driver 记录驱动程序以进行服务
--log-opt 记录驱动程序选项
--max-concurrent API 1.41+
要同时运行的作业任务数(默认等于--replicas)
--mode replicated 服务模式(复制,全局,复制作业或全局作业)
--mount 将文件系统挂载附加到服务
--name 服务名称
--network 网络附件
--no-healthcheck API 1.25+
禁用任何容器指定的健康检查
--no-resolve-image API 1.30+
请勿查询注册表来解析图像摘要和支持的平台
--placement-pref API 1.28+
添加展示位置偏好设置
--publish-p 将端口发布为节点端口
--quiet-q 禁止进度输出
--read-only API 1.28+
将容器的根文件系统挂载为只读
--replicas 任务数
--replicas-max-per-node API 1.40+
每个节点的最大任务数(默认0 =无限)
--reserve-cpu 备用CPU
--reserve-memory 保留记忆
--restart-condition 满足条件时重新启动(“无” |“发生故障” |“任何”)(默认为“任何”)
--restart-delay 重新启动尝试之间的延迟时间(ns | us | ms | s | m | h)(默认为5s)
--restart-max-attempts 放弃之前的最大重新启动次数
--restart-window 用于评估重启策略的窗口(ns | us | ms | s | m | h)
--rollback-delay API 1.28+
任务回滚之间的延迟(ns | us | ms | s | m | h)(默认为0s)
--rollback-failure-action API 1.28+
对回滚失败的操作(“暂停” |“继续”)(默认为“暂停”)
--rollback-max-failure-ratio API 1.28+
在回滚期间可以容忍的故障率(默认为0)
--rollback-monitor API 1.28+
每个任务回滚后监视失败的持续时间(ns | us | ms | s | m | h)(默认为5s)
--rollback-order API 1.29+
回滚顺序(“先启动” |“先停止”)(默认为“先停止”)
--rollback-parallelism 1 API 1.28+
同时回滚的最大任务数(0一次回滚所有任务)
--secret API 1.25+
指定要公开给服务的机密
--stop-grace-period 强制杀死容器之前等待的时间(ns | us | ms | s | m | h)(默认为10s)
--stop-signal API 1.28+
停止容器的信号
--sysctl API 1.40+
Sysctl选项
--tty-t API 1.25+
分配伪TTY
--ulimit API 1.41+
Ulimit选项
--update-delay 更新之间的延迟(ns | us | ms | s | m | h)(默认为0s)
--update-failure-action 更新失败时的操作(“暂停” |“继续” |“回滚”)(默认为“暂停”)
--update-max-failure-ratio
更新期间可容忍的API 1.25+失败率(默认为0)
--update-monitor API 1.25+
每个任务更新后的持续时间,以监视失败(ns | us | ms | s | m | h)(默认为5s)
--update-order API 1.29+
更新顺序(“先启动” |“先停止”)(默认为“先停止”)
--update-parallelism 1 同时更新的最大任务数(一次更新为0)
--user-u 用户名或UID(格式:<名称| uid> [:<组| gid>])
--with-registry-auth 将注册表身份验证详细信息发送给群集代理
--workdir-w 容器内的工作目录

例子

创建服务

$ docker service create --name redis redis:3.0.6

dmu1ept4cxcfe8k8lhtux3ro3

$ docker service create --mode global --name redis2 redis:3.0.6

a8q9dasaafudfs8q8w32udass

$ docker service ls

ID            NAME    MODE        REPLICAS  IMAGE
dmu1ept4cxcf  redis   replicated  1/1       redis:3.0.6
a8q9dasaafud  redis2  global      1/1       redis:3.0.6

使用私有注册表上的映像创建服务

如果您的映像在需要登录的私有注册表上可用,请在登录后使用--with-registry-auth带有的 标志docker service create。如果您的映像存储在registry.example.com私有注册表上,请使用类似以下的命令:

$ docker login registry.example.com

$ docker service  create \
  --with-registry-auth \
  --name my_service \
  registry.example.com/acme/my_image:latest

这将使用加密的WAL日志将登录令牌从本地客户端传递到部署服务的swarm节点。有了这些信息,节点便能够登录到注册表并提取映像。

创建具有5个副本任务(--replicas)的服务

使用该--replicas标志设置复制服务的副本任务数。以下命令创建redis具有5副本任务的服务:

$ docker service create --name redis --replicas=5 redis:3.0.6

4cdgfyky7ozwh3htjfw0d12qv

上面的命令为服务设置所需的任务数。即使命令立即返回,服务的实际扩展也可能需要一些时间。该REPLICAS列同时显示该服务的实际所需的副本任务数。

在以下示例中,所需状态为 5副本,但当前RUNNING任务数为3

$ docker service ls

ID            NAME   MODE        REPLICAS  IMAGE
4cdgfyky7ozw  redis  replicated  3/5       redis:3.0.7

创建RUNNING完所有任务和之后,任务的实际数量等于所需的数量:

$ docker service ls

ID            NAME   MODE        REPLICAS  IMAGE
4cdgfyky7ozw  redis  replicated  5/5       redis:3.0.7

创建包含机密的服务

使用该--secret标志可以使容器访问 密钥

创建一个指定机密的服务:

$ docker service create --name redis --secret secret.json redis:3.0.6

4cdgfyky7ozwh3htjfw0d12qv

创建一个指定机密,目标,用户/组ID和模式的服务:

$ docker service create --name redis \
    --secret source=ssh-key,target=ssh \
    --secret source=app-key,target=app,uid=1000,gid=1001,mode=0400 \
    redis:3.0.6

4cdgfyky7ozwh3htjfw0d12qv

要授予服务访问多个机密的权限,请使用多个--secret标志。

/run/secrets如果未指定目标,则秘密位于容器中。如果未指定目标,则秘密的名称将用作容器中的内存文件。如果指定了目标,则将其用作文件名。在上面的示例中,创建了两个文件:/run/secrets/ssh/run/secrets/app为指定的每个秘密目标。

使用配置创建服务

使用该--config标志可以使容器访问 config

使用配置创建服务。配置将被安装到中redis-config,由在容器内运行命令的用户所有(通常为root),并具有文件模式0444或世界可读性。您可以将uid和指定gid 为数字ID或名称。使用名称时,提供的组/用户名必须预先存在于容器中。将mode被指定为一个4号序列,如0755

$ docker service create --name=redis --config redis-conf redis:3.0.6

使用配置创建服务并指定目标位置和文件模式:

$ docker service create --name redis \
  --config source=redis-conf,target=/etc/redis/redis.conf,mode=0400 redis:3.0.6

要授予服务访问多个配置的权限,请使用多个--config标志。

/如果未指定目标,则配置位于容器中。如果未指定目标,则将配置的名称用作容器中文件的名称。如果指定了目标,则将其用作文件名。

使用滚动更新策略创建服务

$ docker service create \
  --replicas 10 \
  --name redis \
  --update-delay 10s \
  --update-parallelism 2 \
  redis:3.0.6

运行服务更新时,调度程序一次最多更新2个任务,两次10s更新之间。有关更多信息,请参阅滚动更新教程

设置环境变量(-e,-env)

这将为服务中的所有任务设置环境变量。例如:

$ docker service create \
  --name redis_2 \
  --replicas 5 \
  --env MYVAR=foo \
  redis:3.0.6

要指定多个环境变量,请指定多个--env标志,每个标志具有单独的键值对。

$ docker service create \
  --name redis_2 \
  --replicas 5 \
  --env MYVAR=foo \
  --env MYVAR2=bar \
  redis:3.0.6

创建具有特定主机名(--hostname)的服务

此选项将Docker服务容器的主机名设置为特定字符串。例如:

$ docker service create --name redis --hostname myredis redis:3.0.6

在服务上设置元数据(-l,-label)

标签是一key=value对将元数据应用于服务的对。要用两个标签来标记服务:

$ docker service create \
  --name redis_2 \
  --label com.example.foo="bar"
  --label bar=baz \
  redis:3.0.6

有关标签的更多信息,请参阅应用自定义元数据

添加绑定挂载,卷或内存文件系统

Docker支持三种不同类型的挂载,这些挂载允许容器在主机操作系统或内存文件系统上读取或写入文件或目录。这些类型是数据卷(通常简称为卷),绑定安装tmpfs命名管道

绑定安装使其可被安装在容器内的主机上的文件或目录。绑定安装可以是只读的也可以是读写的。例如,容器可以通过主机的绑定安装来共享其主机的DNS信息,/etc/resolv.conf或者容器可以将日志写入其主机的/var/log/myContainerLogs目录中。如果使用绑定安装,并且主机和容器具有不同的权限,访问控制或其他此类详细信息概念,则会遇到可移植性问题。

一个名为量是脱钩用于创建容器的图像和从主机通过你的容器需要持久性数据的机制。命名卷是由Docker创建和管理的,即使当前没有容器在使用它,命名卷也将保留。命名卷中的数据可以在容器和主机之间以及在多个容器之间共享。Docker使用卷驱动程序来创建,管理和安装卷。您可以使用Docker命令备份或还原卷。

tmpfstmpfs装入容器中以存储易失性数据。

一个npipe从主机到容器安装命名管道。

考虑一下您的映像启动轻量级Web服务器的情况。您可以将该图像用作基本图像,复制到网站的HTML文件中,然后将其打包到另一个图像中。每次您的网站更改时,您都需要更新新图像并重新部署为您的网站提供服务的所有容器。更好的解决方案是将网站存储在命名卷中,该卷在启动时将附加到每个Web服务器容器。要更新网站,您只需更新命名卷。

有关命名卷的更多信息,请参见 数据卷

下表描述了适用于服务中的绑定安装和命名卷的选项:

选项 必需的 描述
类型

挂载的类型可以是volumebindtmpfsnpipe。如果未指定类型,则默认为音量

  • volume:将托管卷安装 到容器中。
  • bind:将目录或文件从主机绑定安装到容器中。
  • tmpfs:在容器中挂载tmpfs
  • npipe:将命名管道从主机安装到容器中(仅Windows容器)。
src来源 对于type = bindtype = npipe
  • type = volumesrc是用于指定卷名称的可选方式(例如src = my-volume)。如果命名的卷不存在,则会自动创建。如果未指定src,则为卷分配一个随机名称,该名称在主机上保证是唯一的,但在群集范围内可能不是唯一的。随机命名的卷与其容器具有相同的生命周期,并且在销毁容器时 销毁该卷(在服务更新时,或者在扩展或重新平衡服务时)
  • type = bindsrc是必需的,并且指定要绑定安装的文件或目录的绝对路径(例如src = / path / on / host /)。如果文件或目录不存在,则会产生错误。
  • type = tmpfs:不支持src

DST目的地目标

是的

在容器内部安装路径,例如/ some / path / in / container /。如果该路径在容器的文件系统中不存在,则引擎在装入卷或绑定装入之前,在指定位置创建目录。

只读RO

引擎将绑定和卷以读写方式安装,除非在安装绑定或卷时给出了readonly选项。请注意,在当前Linux实现中,将绑定安装设置为只读不会使其子安装变为只读。另请参见bind-nonrecursive

  • true1或没有值:以只读方式安装绑定或卷。
  • false0:以读写方式装入绑定或卷。

绑定安装的选项

以下选项只能用于绑定安装(type=bind):

选项 描述
绑定传播

请参阅绑定传播部分

一致性

安装的一致性要求;之一

  • 默认值:等同于一致
  • 一致:完全一致。容器运行时和主机始终保持相同的安装视图。
  • 缓存的:装载的主机视图是权威的。在容器中可以看到主机上所做的更新,这可能会有所延迟。
  • 委托的:容器运行时的挂载视图具有权威性。在主机上可以看到容器中所做的更新之前可能会有一些延迟。
绑定非递归 默认情况下,子安装也是递归绑定安装的。但是,当使用只读选项配置绑定安装时,此行为可能会造成混淆,因为子安装不会以只读方式安装。设置bind-nonrecursive禁用递归绑定安装。

值是可选的:

  • true1:禁用递归绑定安装。
  • false0:如果不提供值,则为默认值。启用递归绑定安装。
绑定传播

绑定传播是指是否可以将在给定绑定安装或命名卷中创建的安装传播到该安装的副本。考虑一个安装点/mnt,该安装点也安装在上/tmp。传播设置控制是否在上/tmp/a也可以使用安装/mnt/a。每个传播设置都有一个递归对点。在递归的情况下,请考虑将/tmp/a其也安装为/foo。传播设置控制是否/mnt/a和/或/tmp/a将存在。

对于绑定安装和卷安装,该bind-propagation选项默认rprivate为,并且只能为绑定安装配置。换句话说,命名卷不支持绑定传播。

  • shared:原始安装的子安装暴露于副本安装,副本安装的子安装也传播到原始安装。
  • slave:类似于共享安装,但仅在一个方向上。如果原始安装公开了子安装,则副本安装可以看到它。但是,如果副本安装公开了一个子安装,则原始安装看不到它。
  • private:安装是私有的。其中的子安装不暴露于副本安装,副本安装的子安装也不暴露于原始安装。
  • rshared:与共享相同,但是传播也扩展到嵌套在任何原始或副本安装点中的安装点以及从这些安装点扩展。
  • rslave:与相同slave,但是传播也扩展到嵌套在任何原始或副本安装点中的安装点以及从这些安装点扩展。
  • rprivate:默认值。与相同private,表示原始安装点或副本安装点内的任何安装点都不会向任一方向传播。

有关绑定传播的更多信息,请参见 Linux内核文档中的共享子树

命名卷的选项

以下选项只能用于命名卷(type=volume):

选项 描述
音量驱动器

用于该卷的卷驱动程序插件的名称。默认为 “ local”,如果卷不存在,则使用本地卷驱动程序来创建卷。

体积标识 创建时将一个或多个自定义元数据(“标签”)应用于卷。例如, volume-label = mylabel = hello-world,my-other-label = hello-mars。有关标签的更多信息,请参阅 应用自定义元数据
不复制 默认情况下,如果将空卷附加到容器上,并且容器(dst)的安装路径中已经存在文件或目录,则引擎会将这些文件和目录复制到该卷中,以允许主机访问它们。设置volume-nocopy以禁用将文件从容器的文件系统复制到该卷并装入空卷。

值是可选的:

  • true1:如果不提供值,则为默认值。禁用复制。
  • false0:启用复制。
体积选择 给定的卷驱动程序特定的选项,在创建卷时将传递给该驱动程序。选项以键/值对的逗号分隔列表形式提供,例如, volume-opt = some-option = some-value,volume-opt = some-other-option = some-other-value。有关给定驱动程序的可用选项,请参阅该驱动程序的文档。

tmpfs的选项

以下选项只能用于tmpfs挂载(type=tmpfs);

选项 描述
tmpfs大小 tmpfs安装的大小(以字节为单位)。在Linux中,默认情况下不受限制。
tmpfs模式 tmpfs的文件模式(八进制)。(例如“ 700”“ 0700”。)在Linux中默认为“ 1777”

“ --mount”和“ --volume”之间的区别

--mount标志支持由支持的大多数选项-v--volume标志docker run,有一些重要的例外情况:

  • --mount标志允许您指定音量驱动器和音量驱动程序选项每卷,而无需预先创建的卷。相反, docker run允许您使用该--volume-driver标志指定由所有卷共享的单个卷驱动程序。

  • --mount标志允许您在创建卷之前为卷指定自定义元数据(“标签”)。

  • --mount与配合使用时type=bind,主机路径必须引用主机上的现有 路径。如果该路径不存在,将不会为您创建该路径,并且服务将失败并显示错误。

  • --mount标记不允许您使用Zz标记来重新标记卷,该selinux标记用于标记。

使用命名卷创建服务

下面的示例创建一个使用命名卷的服务:

$ docker service create \
  --name my-service \
  --replicas 3 \
  --mount type=volume,source=my-volume,destination=/path/in/container,volume-label="color=red",volume-label="shape=round" \
  nginx:alpine

对于服务的每个副本,引擎从部署任务的默认(“本地”)卷驱动程序中请求一个名为“ my-volume”的卷。如果该体积不存在,则引擎将创建一个新体积并应用“颜色”和“形状”标签。

启动任务后,该卷将安装在/path/in/container/容器内部。

请注意,默认(“本地”)卷是本地范围内的卷驱动程序。这意味着根据任务部署的位置,该任务将获得一个名为“ my-volume”的 卷,或者与同一服务的其他任务共享同一“ my-volume”。如果在容器中运行的软件未设计为处理写入同一位置的并发进程,则写入单个共享卷的多个容器可能会导致数据损坏。还应考虑到容器可以由Swarm协调器重新安排,并可以部署在其他节点上。

创建使用匿名卷的服务

以下命令创建一个服务,该服务具有三个副本,并且其副本在上具有一个匿名卷/path/in/container

$ docker service create \
  --name my-service \
  --replicas 3 \
  --mount type=volume,destination=/path/in/container \
  nginx:alpine

在此示例中,未source为卷指定名称(),因此将为每个任务创建一个新卷。这保证了每个任务都有自己的卷,并且在任务之间不共享卷。使用匿名卷的任务完成后,将删除它们。

创建使用绑定安装的主机目录的服务

以下示例/path/in/container在支持服务的容器中将主机目录绑定安装到:

$ docker service create \
  --name my-service \
  --mount type=bind,source=/path/on/host,destination=/path/in/container \
  nginx:alpine

设置服务模式(--mode)

服务模式确定这是复制服务还是全局 服务。复制的服务运行指定数量的任务,而全局服务在群集中的每个活动节点上运行。

以下命令创建一个全局服务:

$ docker service create \
 --name redis_2 \
 --mode global \
 redis:3.0.6

指定服务约束(--constraint)

您可以通过定义约束表达式来限制可以安排任务的节点集。约束表达式可以使用match==)或exclude!=)规则。多个约束会找到满足每个表达式(AND匹配)的节点。约束可以匹配节点或Docker Engine标签,如下所示:

节点属性 火柴 例子
node.id 节点编号 node.id==2ivku8v2gvtg4
node.hostname 节点主机名 node.hostname!=node-2
node.role 节点角色(manager/ worker node.role==manager
node.platform.os 节点操作系统 node.platform.os==windows
node.platform.arch 节点架构 node.platform.arch==x86_64
node.labels 用户定义的节点标签 node.labels.security==high
engine.labels Docker Engine的标签 engine.labels.operatingsystem==ubuntu-14.04

engine.labels应用于Docker Engine标签,例如操作系统,驱动程序等。Swarm管理员node.labels通过使用docker node update命令添加这些元素以用于操作目的。

例如,以下将redis服务的任务限制为节点类型标签等于queue的节点:

$ docker service create \
  --name redis_2 \
  --constraint node.platform.os==linux \
  --constraint node.labels.type==queue \
  redis:3.0.6

如果服务约束排除了群集中的所有节点,则会显示一条消息,指出找不到合适的节点,但是一旦合适的节点可用,调度程序将启动协调循环并部署服务。

在下面的示例中,未找到满足约束的节点,从而导致服务与所需状态不一致:

$ docker service create \
  --name web \
  --constraint node.labels.region==east \
  nginx:alpine

lx1wrhhpmbbu0wuk0ybws30bc
overall progress: 0 out of 1 tasks
1/1: no suitable node (scheduling constraints not satisfied on 5 nodes)

$ docker service ls
ID                  NAME     MODE         REPLICAS   IMAGE               PORTS
b6lww17hrr4e        web      replicated   0/1        nginx:alpine

region=east标签添加到群集中的节点后,该服务将协调,并部署所需数量的副本:

$ docker node update --label-add region=east yswe2dm4c5fdgtsrli1e8ya5l
yswe2dm4c5fdgtsrli1e8ya5l

$ docker service ls
ID                  NAME     MODE         REPLICAS   IMAGE               PORTS
b6lww17hrr4e        web      replicated   1/1        nginx:alpine

指定服务放置首选项(--placef-pref)

您可以设置服务以将任务平均分配到不同类别的节点上。可能有用的一个示例是在一组数据中心或可用性区域上平衡任务。下面的示例说明了这一点:

$ docker service create \
  --replicas 9 \
  --name redis_2 \
  --placement-pref spread=node.labels.datacenter \
  redis:3.0.6

--placement-prefspread策略(当前是唯一受支持的策略)一起使用,以将任务平均分配到datacenter 节点标签的值上。在此示例中,我们假设每个节点都datacenter贴有一个节点标签。如果在群中的节点之间此标签有三个不同的值,则三分之一的任务将放置在与每个值关联的节点上。即使具有一个值比另一个值更多的节点也是如此。例如,考虑以下节点集:

  • 三个节点 node.labels.datacenter=east
  • 两个节点 node.labels.datacenter=south
  • 一个节点 node.labels.datacenter=west

由于我们分布在datacenter标签的值上,并且该服务具有9个副本,因此每个数据中心最终将有3个副本。与该值相关联的三个节点east,因此每个节点都将获得为此值保留的三个副本之一。有两个具有值的节点south,并且将在该节点 之间划分该值的三个副本,其中一个副本接收两个副本,另一个副本仅接收一个副本。最后,west 有一个节点将为保留所有三个副本west

如果某一类别中的节点(例如,具有的节点 node.labels.datacenter=south)由于约束或资源限制而无法公平地处理任务,则可能的话,多余的任务将分配给其他节点。

放置首选项支持引擎标签和节点标签。上面的示例使用节点标签,因为该标签是用引用的 node.labels.datacenter。要散布引擎标签的值,请使用 --placement-pref spread=engine.labels.<labelname>

可以向服务添加多个放置首选项。这将建立首选项的层次结构,以便首先将任务划分为一个类别,然后再将其划分为其他类别。一个可能有用的示例是在数据中心之间公平地划分任务,然后通过选择机架在每个数据中心内划分任务。要添加多个展示位置偏好设置,请--placement-pref多次指定该标志。该顺序很重要,并且在进行调度决策时,将按照给定的顺序应用放置首选项。

以下示例设置具有多个展示位置首选项的服务。任务首先分布在各个数据中心,然后分布在机架上(如各个标签所示):

$ docker service create \
  --replicas 9 \
  --name redis_2 \
  --placement-pref 'spread=node.labels.datacenter' \
  --placement-pref 'spread=node.labels.rack' \
  redis:3.0.6

当使用来更新服务时docker service update,会--placement-pref-add 在所有现有的展示位置首选项之后附加一个新的展示位置首选项。 --placement-pref-rm删除与参数匹配的现有展示位置偏好设置。

指定服务的内存要求和约束(--reserve-memory和--limit-memory)

如果您的服务需要最少的内存量才能正常运行,则可以使用--reserve-memory该选项指定仅在可保留这么多内存的节点上调度该服务。如果没有满足该条件的可用节点,则该任务未安排,但仍处于挂起状态。

以下示例要求在计划将服务安排在该节点上运行之前,在给定节点上必须有4GB的内存可用。

$ docker service create --reserve-memory=4GB --name=too-big nginx:alpine

管理器不会在单个节点上安排一组容器,这些容器的组合预留量超过该节点上的可用内存。