docker service create
创建 docker service
描述
创建新服务
使用
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
备选方案
名字,简写 | 默认 | 描述 |
---|---|---|
--config | | 指定配置以暴露给服务 |
--constraint | | 展示位置限制 |
--container-label | | 容器标签 |
--credential-spec | | 托管服务帐户的凭证规范(仅限Windows) |
--detach,-d | 真正 | 立即退出,而不是等待服务收敛 |
--dns | | 设置自定义DNS服务器 |
--dns-option | | 设置DNS选项 |
--dns-search | | 设置自定义DNS搜索域 |
--endpoint-mode | 要人 | 端点模式(vip或dnsrr) |
--entrypoint | | 覆盖图像的默认入口点 |
--env,-e | | 设置环境变量 |
--env-file | | 读入环境变量文件 |
--group | | 为容器设置一个或多个补充用户组 |
--health-cmd | | 运行以检查运行状况的命令 |
--health-interval | | 运行检查之间的时间(ms | s | m | h) |
--health-retries | 0 | 需要报告不健康的连续失败 |
--health-start-period | | 在重新计数到不稳定(ms | s | m | h)之前,容器初始化的开始时间段 |
--health-timeout | | 允许一次检查运行的最长时间(ms | s | m | h) |
--host | | 设置一个或多个自定义主机到IP映射(主机:IP) |
--hostname | | 容器主机名 |
--label, -l | | 服务标签 |
--limit-CPU | | 限制CPU |
--limit-memory | 0 | 限制记忆 |
--log-driver | | 记录驱动程序的服务 |
--log-OPT | | 记录驱动程序选项 |
--mode | 复制 | 服务模式(复制或全局) |
--mount | | 将文件系统挂载附加到服务 |
--name | | 服务名称 |
--network | | 网络附件 |
--no-healthcheck | 假 | 禁用任何容器指定的HEALTHCHECK |
--no-resolve-image | 假 | 不要查询注册表来解析图像摘要和支持的平台 |
--placement-PREF | | 添加展示位置首选项 |
--publish,-p | | 将端口发布为节点端口 |
--quiet,-q | 假 | 抑制进度输出 |
--read-only | 假 | 将容器的根文件系统挂载为只读 |
--replicas | | 任务数量 |
--reserve-CPU | | 预留CPU |
--reserve-memory | 0 | 保留内存 |
--restart-condition | | 满足条件时重新启动(“none”|“on-failure”|“any”)(默认为“any”) |
--restart-delay | | 重启尝试之间的延迟(ns | us | ms | s | m | h)(默认5秒) |
--restart-max-attempts | | 放弃前的最大重启次数 |
--restart-window | | 用于评估重新启动策略的窗口(ns | us | ms | s | m | h) |
--rollback-delay | 0 | 任务回滚之间的延迟(ns | us | ms | s | m | h)(默认值为0) |
--rollback-failure-action | | 回滚失败的操作(“暂停”|“继续”)(默认“暂停”) |
--rollback-max-failure-ratio | 0 | 在回滚期间容忍的失败率(默认0) |
--rollback-monitor | 0 | (ns | us | ms | s | m | h)(默认5秒)每个任务回滚之后的持续时间 |
--rollback-order | | 回滚顺序(“start-first”|“stop-first”)(默认“stop-first”) |
--rollback-parallelism | 1 | 同时回滚的任务的最大数量(0一次全部回滚) |
--secret | | 指定泄露给服务的秘密 |
--stop-grace-period | | 强制杀死一个容器之前等待的时间(ns | us | ms | s | m | h)(默认10秒) |
--stop-signal | | 停止容器的信号 |
--tty, -t | 假 | 分配一个伪TTY |
--update-delay | 0 | 更新之间的延迟(ns | us | ms | s | m | h)(默认为0) |
--update-failure-action | | 更新失败的操作(“暂停”|“继续”|“回滚”)(默认“暂停”) |
--update-max-failure-ratio | 0 | 更新期间容许的失败率(默认0) |
--update-monitor | 0 | (ns | us | ms | s | m | h)(默认5秒)每个任务更新后的持续时间 |
--update-order | | 更新顺序(“start-first”|“stop-first”)(默认为“stop-first”) |
--update-parallelism | 1 | 同时更新的最大任务数(0个一次全部更新) |
--user,-u | | 用户名或UID(格式:<名称| uid>:<组| gid>) |
--with-registry-auth | 假 | 向注册代理发送注册表认证详细信息 |
--workdir,-w | | 容器内的工作目录 |
父命令
命令 | 描述 |
---|---|
docker service | 管理服务 |
相关命令
命令 | 描述 |
---|---|
docker service create | 创建一项新服务 |
docker service inspect | 显示一项或多项服务的详细信息 |
docker service logs | 获取服务或任务的日志 |
docker service ls | 列出服务 |
docker service ps | 列出一项或多项服务的任务 |
docker service rm | 删除一项或多项服务 |
docker service scale | 扩展一个或多个复制服务 |
docker service update | 更新服务 |
扩展描述
创建由指定参数描述的服务。必须在管理器节点上运行此命令。
实例
创建服务
$ 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
创建一个包含5个副本任务的服务%28-副本%29
使用--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
指定的每个秘密目标。
使用滚动更新策略创建服务
$ 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 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
有关标签的详细信息,请参阅应用自定义元数据...
添加绑定挂载或 volume
Docker 支持两种不同的安装方式,允许容器读取或写入其他容器或主机操作系统上的文件或目录。这些类型是数据卷(通常简称为volume
)和绑定挂载。
另外,Docker 支持tmpfs
挂载。
绑定贴装
使提供给它被安装在容器内的主机上的文件或目录。绑定挂载可以是只读的或读写的。例如,容器可能通过主机的绑定挂载来共享其主机的DNS信息,/etc/resolv.conf
或者容器可能会将日志写入其主机的/var/log/myContainerLogs
目录。如果您使用绑定挂载并且您的主机和容器具有不同的权限,访问控制或其他此类详细信息的概念,那么您将遇到可移植性问题。
命名卷是一种机制,用于将容器所需的持久性数据与用于创建容器的映像和主机机器分离。 命名卷由Docker创建和管理,即使当前没有容器正在使用它,命名卷仍然存在。 命名卷中的数据可以在容器和主机之间共享,也可以在多个容器之间共享。 Docker使用卷驱动来创建,管理和安装卷。 您可以使用Docker命令备份或恢复卷。
tmpfs
在容器内挂载 tmpfs
以获取易失性数据。
考虑一下你的图像启动一个轻量级web服务器的情况。您可以将该图像用作基础图像,复制网站的HTML文件并将其打包到另一个图像中。每次您的网站更改时,您都需要更新新映像并重新部署为您的网站提供服务的所有容器。更好的解决方案是将网站存储在每个Web服务器容器启动时附加的命名卷中。要更新网站,只需更新指定的卷。
有关命名卷的详细信息,请参阅数据量
下表描述了应用于服务中的绑定挂载和命名卷的选项:
选项 | 需要 | 描述 |
---|---|---|
类型 | | mount的类型可以是volume,bind或tmpfs。如果没有指定类型,则默认为音量。卷:将托管卷装入容器。bind:将主机上的目录或文件绑定到容器中。tmpfs:在容器中安装一个tmpfs |
src或来源 | 对于type = bind only> | type = volume:src是指定卷名称的可选方式(例如,src = my-volume)。如果指定的卷不存在,则会自动创建。如果未指定src,则会为该卷指定一个随机名称,该名称在主机上保证是唯一的,但可能不是群集范围内唯一的。一个随机命名的卷具有与其容器相同的生命周期,并且在容器被销毁时(这是在服务更新时,或者在扩展或重新平衡服务时)被销毁。type = bind:src是必需的,并指定绝对路径到文件或目录进行绑定挂载(例如,src = / path / on / host /)。如果文件或目录不存在,则会产生错误。type = tmpfs:src不受支持。 |
dst或目标或目标 | 是 | 装入容器内的路径,例如/ some / path / in / container /。如果路径不存在于容器的文件系统中,则引擎会在挂载卷或绑定挂载之前在指定位置创建一个目录。 |
只读或ro | | 除非在安装绑定或卷时提供只读选项,否则引擎将挂接和卷读写。true或1或没有值:将绑定或卷装载为只读。假或0:装入绑定或卷读写。 |
一致性 | | 底座的一致性要求; 默认值之一:等同于一致。一致:完全一致。容器运行时和主机始终保持相同的安装视图。缓存:主机的装载视图是权威的。在主机上进行的更新在容器内可见之前可能会有延迟。委托:容器运行时的挂载视图是权威的。在容器中进行的更新可能会在主机上可见之前出现延迟。 |
- 卷:安装管理量放进容器里。
- 绑定:绑定-将一个目录或文件从主机装载到容器中。
- tmpfs:在容器中安装tmpfs
**src** or **source** for type=bind only>
- type = volume:src是指定卷名称的可选方式(例如,src = my-volume)。如果指定的卷不存在,则会自动创建。如果未指定 src,则会为该卷指定一个随机名称,该名称在主机上保证是唯一的,但可能不是群集范围内唯一的。随机命名卷具有相同的生命周期为
容器
,并且当被破坏容器
被销毁(这是在服务更新,或缩放或重新平衡服务时)
- type = bind:src 是必需的,并指定要绑定挂载的文件或目录的绝对路径(例如,src = / path / on / host /)。如果文件或目录不存在,则会产生错误。
- type = tmpfs:src 不受支持。
**dst** or **destination** or **target** yes Mount path inside the container, for example /some/path/in/container/. If the path does not exist in the container's filesystem, the Engine creates a directory at the specified location before mounting the volume or bind-mount.
**readonly** or **ro** The Engine mounts binds and volumes read-write unless readonly option is given when mounting the bind or volume.
- true 或1或没有值:将绑定或卷装载为只读。
- false或0:挂载绑定或卷读写。
**consistency** The consistency requirements for the mount; one of
- 默认值:等效于一致。
- 一致性:完全一致。容器运行时和主机始终保持相同的挂载视图。
- 缓存:主机的装载视图是权威的。在主机上进行的更新在容器内可见之前可能会有延迟。
- 委托:容器运行时的挂载视图是权威的。在容器中进行的更新可能会在主机上可见之前出现延迟。
约束传播
绑定传播是指在给定的绑定挂载或命名卷中创建的挂载是否可以传播到该挂载的副本。考虑一个挂载点/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 kernel documentation for shared subtree.
指定卷的选项
以下选项只能用于命名的卷(type=volume
);
选项 | 描述 |
---|---|
volume-driver | 用于卷的卷驱动程序插件的名称。如果该卷不存在,则默认为“本地”,以使用本地卷驱动程序创建卷。 |
volume-label | 创建时应用于卷的一个或多个自定义元数据(“标签”)。例如,volume-label=mylabel=hello-world,my-other-label=hello-mars。有关标签的更多信息,请参阅应用自定义元数据。 |
volume-nocopy | 默认情况下,如果您将空卷附加到容器,并且文件或目录已经存在于容器中的安装路径(dst)中,则引擎会将这些文件和目录复制到卷中,以便主机访问它们。设置volume-nocopy为禁用将容器文件系统中的文件复制到卷并挂载空卷。值是可选的:如果不提供值,则为true或1:默认值。禁用复制。假或0:启用复制。 |
volume-opt | 特定于给定卷驱动程序的选项,将在创建卷时传递给驱动程序。选项以逗号分隔的键/值对列表形式提供,例如,volume-opt = some-option = some-value,volume-opt = some-other-option = some-other-value。有关给定驱动程序的可用选项,请参阅该驱动程序的文档。 |
- 如果您没有提供值,则为 true 或1:默认值。禁用复制。
- FALSE或0:启用复制。
**volume-opt** Options specific to a given volume driver, which will be passed to the driver when creating the volume. Options are provided as a comma-separated list of key/value pairs, for example, volume-opt=some-option=some-value,volume-opt=some-other-option=some-other-value. For available options for a given driver, refer to that driver's documentation.
tmpfs选项
以下选项只能用于 tmpfs mounts(type=tmpfs
);
选项 | 描述 |
---|---|
tmpfs的大小 | tmpfs的大小,以字节为单位。Linux中默认无限制。 |
tmpfs的模式 | tmpfs的八进制文件模式。(例如“700”或“0700”)。在Linux中默认为“1777”。 |
“-挂载”和“-卷”的区别
--mount
属性支持的大多数选项。-v
或--volume
标志docker run
,除了一些重要的例外:
--mount
标志允许您指定卷驱动程序和卷驱动程序选项。每卷
,而不预先创建卷。相反,docker run
允许您指定由所有卷共享的单个卷驱动程序,使用--volume-driver
标志。
--mount
标志允许您在卷创建之前指定卷的自定义元数据(“标签”)。
- 当你使用
--mount
带着type=bind
,主机路径必须引用现有
主机上的路径。将不会为您创建路径,如果路径不存在,则服务将失败。
--mount
标志不允许您将卷重新命名为Z
或z
标志,用于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” 的新
卷,或与同一服务的其他任务共享相同的“我的卷”。如果容器内运行的软件不是用来处理写入同一位置的并发进程的,则写入单个共享卷的多个容器可能会导致数据损坏。还要考虑到容器可以由 Swarm 协调器重新
调度并部署在不同的节点上。
创建使用匿名卷的服务
下面的命令创建一个带有三个副本的服务,其中包含一个匿名卷。/path/in/container
*
$ docker service create \
--name my-service \
--replicas 3 \
--mount type=volume,destination=/path/in/container \
nginx:alpine
在此示例中,没有source
为该卷指定 name(),因此会为每个任务创建一个新卷。这可以确保每个任务都获得自己的卷,并且不会在任务之间共享卷。完成使用任务后,匿名卷将被删除。
创建使用绑定挂载主机目录的服务。
下面的示例绑定-将主机目录安装在/path/in/container
在支持服务的容器中:
$ docker service create \
--name my-service \
--mount type=bind,source=/path/on/host,destination=/path/in/container \
nginx:alpine
设置服务模式( - 模式)
服务模式确定这是复制服务还是全局服务。复制服务按指定运行多个任务,而全局服务在群中的每个活动节点上运行。
以下命令创建一个全局服务:
$ docker service create \
--name redis_2 \
--mode global \
redis:3.0.6
指定服务约束(-constraint)
您可以通过定义约束表达式来限制可以调度任务的节点集合。多个约束找到满足每个表达式的节点(AND匹配)。约束可以与节点或Docker引擎标签匹配,如下所示:
node attribute | matches | example |
---|---|---|
node.id | Node ID | node.id == 2ivku8v2gvtg4 |
node.hostname | Node hostname | node.hostname != node-2 |
node.role | Node role | node.role == manager |
node.labels | user defined node labels | node.labels.security == high |
engine.labels | Docker Engine's labels | engine.labels.operatingsystem == ubuntu 14.04 |
engine.labels
适用于 Docker Engine 标签,例如操作系统,驱动程序等。群集管理员node.labels
通过使用该docker node update
命令添加用于操作目的。
例如,以下将 redis 服务的任务限制为节点类型标签等于队列的节点:
$ docker service create \
--name redis_2 \
--constraint 'node.labels.type == queue' \
redis:3.0.6
指定服务布局偏好(-placement-pref)
您可以设置该服务,以便在不同的节点类别上平均划分任务。其中一个有用的例子是在一组数据中心或可用性区域上平衡任务。下面的例子说明了这一点:
$ docker service create \
--replicas 9 \
--name redis_2 \
--placement-pref 'spread=node.labels.datacenter' \
redis:3.0.6
--placement-pref
与spread
策略(当前唯一支持的策略)一起使用,以将任务均匀分布在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
删除与参数匹配的现有展示位置偏好设置。
将服务附加到现有网络( - 网络)
您可以使用覆盖网络连接群集中的一个或多个服务。
首先,在管理器节点上创建一个覆盖网络---docker网络创建命令:
$ docker network create --driver overlay my-network
etjpu59cykrptrgw0z0hk5snf
在以群集模式创建覆盖网络之后,所有管理器节点都可以访问该网络。
创建服务并传递-Network标志将服务附加到覆盖网络时:
$ docker service create \
--replicas 3 \
--network my-network \
--name my-web \
nginx
716thylsndqma81j6kkkb5aus
群将My-Network扩展到运行服务的每个节点。
相同网络上的容器可以使用服务发现...
在群外发布服务端口(-p,-publish)
您可以发布服务端口,使它们在外部可用给群集,使用--publish
:
$ docker service create --publish <TARGET-PORT>:<SERVICE-PORT> nginx
例如:
$ docker service create --name my_web --replicas 3 --publish 8080:80 nginx
当您发布服务端口时,群路由网格使服务可以在每个节点上的目标端口上访问,而不管该节点上是否有运行该服务的任务。有关更多信息,请参阅使用群模式路由网格...
仅为tcp或udp发布端口。
默认情况下,当发布端口时,它是 TCP 端口。您可以专门发布UDP 端口,而不是 TCP 端口,也可以是 TCP 端口之外的端口。当您同时发布 TCP 和 UDP 端口时,Docker 1.12.2 和更早版本要求您添加后缀/tcp
对于 TCP 端口。否则它是可选的。
仅TCP
以下两个命令是等价的。
$ docker service create --name dns-cache -p 53:53 dns-cache
$ docker service create --name dns-cache -p 53:53/tcp dns-cache
TCP和UDP
$ docker service create --name dns-cache -p 53:53/tcp -p 53:53/udp dns-cache
仅UDP
$ docker service create --name dns-cache -p 53:53/udp dns-cache
提供托管服务帐户的凭证规格(仅限 Windows)
此选项仅用于使用Windows容器的服务。大--credential-spec必须是格式file://<filename>或registry://<value-name>...
当使用file://<filename>格式时,引用的文件必须出现在CredentialSpecs在docker数据目录中的子目录,该子目录默认为C:\ProgramData\Docker\在窗户上。例如,指定file://spec.json负载C:\ProgramData\Docker\CredentialSpecs\spec.json...
当使用registry://<value-name>格式时,凭据规范是从守护进程主机上的Windows注册表读取的。指定的注册表值必须位于:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs
使用模板创建服务
的一些标志可以使用模板。service create
,使用Go‘s提供的语法。文本/模板包裹。
支持的标志如下:
--hostname
--mount
--env
Go模板的有效占位符列在下面:
Placeholder | Description |
---|---|
.Service.ID | Service ID |
.Service.Name | Service name |
.Service.Labels | Service labels |
.Node.ID | Node ID |
.Task.ID | Task ID |
.Task.Name | Task name |
.Task.Slot | Task slot |
模板示例
在这个例子中,我们将根据服务的名称和节点的ID设置创建容器的模板。
$ docker service create --name hosttempl \
--hostname="{{.Node.ID}}-{{.Service.Name}}"\
busybox top
va8ew30grofhjoychbr6iot8c
$ docker service ps va8ew30grofhjoychbr6iot8c
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
wo41w8hg8qan hosttempl.1 busybox:latest@sha256:29f5d56d12684887bdfa50dcd29fc31eea4aaf4ad3bec43daf19026a7ce69912 2e7a8a9c4da2 Running Running about a minute ago
$ docker inspect --format="{{.Config.Hostname}}" hosttempl.1.wo41w8hg8qanxwjwsg4kxpprj
x3ti0erg11rjpg64m75kej2mz-hosttempl