泊坞窗运行
描述
在新容器中运行命令
用法
$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
扩展说明
该docker run
命令首先creates
是在指定图像上的可写容器层,然后starts
使用指定命令。也就是说,
docker run
相当于API /containers/create
,然后
/containers/(id)/start
。使用可以重新启动已停止的容器,使其之前的所有更改保持不变docker start
。请参阅docker ps -a
以查看所有容器的列表。
该docker run
命令可与结合使用docker commit
以
更改容器运行的命令。有一个关于额外的详细信息docker run
在泊坞运行参考。
有关将容器连接到网络的信息,请参阅“ Docker网络概述”。
有关此命令的示例用法,请参阅下面的示例部分。
选项
名称,简写 | 默认 | 描述 |
--add-host |
添加自定义主机到IP的映射(host:ip) | |
--attach , -a |
附加到STDIN,STDOUT或STDERR | |
--blkio-weight |
块IO(相对权重),介于10到1000之间,或者为0禁用(默认为0) | |
--blkio-weight-device |
块IO重量(相对设备重量) | |
--cap-add |
添加Linux功能 | |
--cap-drop |
放弃Linux功能 | |
--cgroup-parent |
容器的可选父cgroup | |
--cgroupns |
要使用(host | private)'host'的API 1.41+ Cgroup命名空间:在Docker主机的cgroup命名空间'private'中运行容器:在其自己的私有cgroup命名空间中运行容器'':使用默认配置的cgroup命名空间守护程序上的-cgroupns-mode选项(默认) |
|
--cidfile |
将容器ID写入文件 | |
--cpu-count |
CPU数量(仅Windows) | |
--cpu-percent |
CPU百分比(仅Windows) | |
--cpu-period |
限制CPU CFS(完全公平的调度程序)期限 | |
--cpu-quota |
限制CPU CFS(完全公平的调度程序)配额 | |
--cpu-rt-period |
API 1.25+ 限制CPU实时时间(以微秒为单位) |
|
--cpu-rt-runtime |
API 1.25+ 限制CPU实时运行时间(以微秒为单位) |
|
--cpu-shares , -c |
CPU份额(相对重量) | |
--cpus |
API 1.25+ CPU数量 |
|
--cpuset-cpus |
允许执行的CPU(0-3,0,1) | |
--cpuset-mems |
允许执行的MEM(0-3,0,1) | |
--detach , -d |
在后台运行容器并打印容器ID | |
--detach-keys |
覆盖分离容器的键序列 | |
--device |
将主机设备添加到容器 | |
--device-cgroup-rule |
将规则添加到“允许cgroup的设备”列表中 | |
--device-read-bps |
限制从设备读取的速率(每秒字节数) | |
--device-read-iops |
限制从设备读取的速率(每秒IO) | |
--device-write-bps |
限制对设备的写入速率(每秒字节数) | |
--device-write-iops |
限制对设备的写入速率(每秒IO) | |
--disable-content-trust |
true |
跳过图像验证 |
--dns |
设置自定义DNS服务器 | |
--dns-opt |
设定DNS选项 | |
--dns-option |
设定DNS选项 | |
--dns-search |
设置自定义DNS搜索域 | |
--domainname |
容器NIS域名 | |
--entrypoint |
覆盖图像的默认ENTRYPOINT | |
--env , -e |
设置环境变量 | |
--env-file |
读入环境变量文件 | |
--expose |
公开一个或多个端口 | |
--gpus |
API 1.40+ GPU设备添加到容器中(“全部”传递所有GPU) |
|
--group-add |
添加其他群组即可加入 | |
--health-cmd |
运行命令以检查运行状况 | |
--health-interval |
运行检查之间的时间(ms | s | m | h)(默认为0s) | |
--health-retries |
连续出现故障需要报告不健康 | |
--health-start-period |
API 1.29+ 容器在开始运行状况重试倒计时(ms | s | m | h)之前初始化的起始时间(默认为0s) |
|
--health-timeout |
允许执行一次检查的最长时间(ms | s | m | h)(默认为0s) | |
--help |
打印用量 | |
--hostname , -h |
容器主机名 | |
--init |
API 1.25+ 在容器内运行一个初始化程序,以转发信号并获取进程 |
|
--interactive , -i |
即使未连接STDIN,也应使其保持打开状态 | |
--io-maxbandwidth |
系统驱动器的最大IO带宽限制(仅Windows) | |
--io-maxiops |
系统驱动器的最大IOps限制(仅Windows) | |
--ip |
IPv4地址(例如172.30.100.104) | |
--ip6 |
IPv6地址(例如2001:db8 :: 33) | |
--ipc |
使用的IPC模式 | |
--isolation |
集装箱隔离技术 | |
--kernel-memory |
内核内存限制 | |
--label , -l |
在容器上设置元数据 | |
--label-file |
读入行分隔的标签文件 | |
--link |
将链接添加到另一个容器 | |
--link-local-ip |
容器IPv4 / IPv6链接本地地址 | |
--log-driver |
容器的日志记录驱动程序 | |
--log-opt |
日志驱动程序选项 | |
--mac-address |
容器MAC地址(例如92:d0:c6:0a:29:33) | |
--memory , -m |
内存限制 | |
--memory-reservation |
内存软限制 | |
--memory-swap |
交换限制等于内存加交换:“-1”以启用无限交换 | |
--memory-swappiness |
-1 |
调音容器内存交换(0到100) |
--mount |
将文件系统挂载附加到容器 | |
--name |
为容器分配一个名称 | |
--net |
将容器连接到网络 | |
--net-alias |
为容器添加网络范围的别名 | |
--network |
将容器连接到网络 | |
--network-alias |
为容器添加网络范围的别名 | |
--no-healthcheck |
禁用任何容器指定的健康检查 | |
--oom-kill-disable |
禁用OOM杀手 | |
--oom-score-adj |
调台主持人的OOM首选项(-1000到1000) | |
--pid |
使用的PID名称空间 | |
--pids-limit |
调音容器pids限制(将-1设置为无限制) | |
--platform |
API 1.32+ 设置平台(如果服务器具有多平台功能) |
|
--privileged |
赋予此容器扩展的特权 | |
--publish , -p |
将容器的端口发布到主机 | |
--publish-all , -P |
将所有公开的端口发布到随机端口 | |
--pull |
missing |
在运行之前拉图像(“总是” |“缺少” |“从不”) |
--read-only |
将容器的根文件系统挂载为只读 | |
--restart |
no |
容器退出时重新启动策略以应用 |
--rm |
退出时自动删除容器 | |
--runtime |
用于此容器的运行时 | |
--security-opt |
安全选项 | |
--shm-size |
/ dev / shm的大小 | |
--sig-proxy |
true |
代理接收到该过程的信号 |
--stop-signal |
SIGTERM |
停止容器的信号 |
--stop-timeout |
API 1.25+ 超时(以秒为单位)以停止容器 |
|
--storage-opt |
容器的存储驱动程序选项 | |
--sysctl |
Sysctl选项 | |
--tmpfs |
挂载tmpfs目录 | |
--tty , -t |
分配伪TTY | |
--ulimit |
Ulimit选项 | |
--user , -u |
用户名或UID(格式:<名称| uid> [:<组| gid>]) | |
--userns |
要使用的用户名称空间 | |
--uts |
要使用的UTS命名空间 | |
--volume , -v |
绑定挂载卷 | |
--volume-driver |
容器的可选音量驱动器 | |
--volumes-from |
从指定的容器挂载卷 | |
--workdir , -w |
容器内的工作目录 |
例子
分配名称并分配伪TTY(--name,-it)
$ docker run --name test -it debian
root@d6c0fe130dba:/# exit 13
$ echo $?
13
$ docker ps -a | grep test
d6c0fe130dba debian:7 "/bin/bash" 26 seconds ago Exited (13) 17 seconds ago test
本示例运行test
使用该debian:latest
图像命名的容器。的-it
指示多克尔分配一个伪TTY连接到所述容器的stdin; bash
在容器中创建一个交互式外壳。在此示例中,bash
通过输入退出外壳程序
exit 13
。此退出代码将传递给的调用者
docker run
,并记录在test
容器的元数据中。
捕获容器ID(--cidfile)
$ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
这将创建一个容器并打印test
到控制台。该cidfile
标志使Docker尝试创建一个新文件并将容器ID写入其中。如果文件已经存在,则Docker将返回错误。docker run
退出时,Docker将关闭该文件。
完整的容器功能(特权)
$ docker run -t -i --rm ubuntu bash
root@bc338942ef20:/# mount -t tmpfs none /mnt
mount: permission denied
这将不会起作用,因为在默认情况下,最有潜在危险的核能力下降; 包括cap_sys_admin
(挂载文件系统所需)。但是,该--privileged
标志将允许它运行:
$ docker run -t -i --privileged ubuntu bash
root@50e3f57e16e6:/# mount -t tmpfs none /mnt
root@50e3f57e16e6:/# df -h
Filesystem Size Used Avail Use% Mounted on
none 1.9G 0 1.9G 0% /mnt
该--privileged
标志为容器提供了所有功能,并且还device
解除了cgroup控制器强制执行的所有限制。换句话说,容器可以完成主机可以做的几乎所有事情。存在此标志是为了允许特殊用例,例如在Docker中运行Docker。
设置工作目录(-w)
$ docker run -w /path/to/dir/ -i -t ubuntu pwd
该-w
让所执行的命令目录里面给出,这里
/path/to/dir/
。如果路径不存在,则会在容器内创建该路径。
设置每个容器的存储驱动程序选项
$ docker run -it --storage-opt size=120G fedora /bin/bash
此(大小)将允许在创建时将容器rootfs大小设置为120G。此选项仅适用于devicemapper
,btrfs
,overlay2
,
windowsfilter
和zfs
图形驱动程序。对于devicemapper
,btrfs
,windowsfilter
和zfs
图形驱动程序,用户无法通过的尺寸小于默认尺寸BaseFS。对于overlay2
存储驱动程序,只有在支持fsxfs
并通过pquota
mount选项进行安装的情况下,size选项才可用。在这种情况下,用户可以传递小于背衬fs尺寸的任何尺寸。
挂载tmpfs(--tmpfs)
$ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image
该--tmpfs
标志安装一个空的tmpfs与容器rw
,
noexec
,nosuid
,size=65536k
选项。
挂载量(-v,-只读)
$ docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd
该-v
标志将当前工作目录安装到容器中。在-w
让当前的工作目录内执行,通过改变进目录中返回的值的命令pwd
。因此,此组合使用容器在当前工作目录中执行命令。
$ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash
当绑定安装的卷的主机目录不存在时,Docker将为您自动在主机上创建此目录。在上面的示例中,Docker将/doesnt/exist
在启动容器之前创建文件夹。
$ docker run --read-only -v /icanwrite busybox touch /icanwrite/here
卷可与结合使用,--read-only
以控制容器在何处写入文件。该--read-only
标志将容器的根文件系统挂载为只读,禁止写入该容器的指定卷以外的其他位置。
$ docker run -t -i -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/static-docker-binary:/usr/bin/docker busybox sh
通过绑定安装docker unix套接字和静态链接的docker二进制文件(请参阅获取linux二进制文件),可以为容器提供创建和操作主机的Docker守护程序的完全访问权限。
在Windows上,必须使用Windows样式的语义指定路径。
PS C:\> docker run -v c:\foo:c:\dest microsoft/nanoserver cmd /s /c type c:\dest\somefile.txt
Contents of file
PS C:\> docker run -v c:\foo:d: microsoft/nanoserver cmd /s /c type d:\somefile.txt
Contents of file
使用基于Windows的容器时,以下示例将失败,因为容器内的卷或绑定安装的目的地必须是以下位置之一:不存在的目录或空目录;或C:以外的驱动器。此外,绑定安装的源必须是本地目录,而不是文件。
net use z: \\remotemachine\share
docker run -v z:\foo:c:\dest ...
docker run -v \\uncpath\to\directory:c:\dest ...
docker run -v c:\foo\somefile.txt:c:\dest ...
docker run -v c:\foo:c: ...
docker run -v c:\foo:c:\existing-directory-with-contents ...
有关卷的深入信息,请参阅管理容器中的数据
使用--mount标志添加绑定安装或卷
该--mount
标志允许您tmpfs
在容器中挂载卷,主机目录和挂载。
该--mount
标志支持-v
或
标志支持的大多数选项--volume
,但使用不同的语法。有关的深度信息
--mount
的标志,和之间的比较--volume
和--mount
,请参考服务创建命令参考。
即使没有计划弃用--volume
,仍--mount
建议使用。
例子:
$ docker run --read-only --mount type=volume,target=/icanwrite busybox touch /icanwrite/here
$ docker run -t -i --mount type=bind,src=/data,dst=/data busybox sh
发布或公开端口(-p,-expose)
$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
这会将8080
容器的端口绑定到主机80
上127.0.0.1
的TCP端口。您还可以指定udp
和sctp
端口。《Docker用户指南》
详细解释了如何在Docker中操作端口。
请注意,未绑定到主机的端口(即-p 80:80
而不是
-p 127.0.0.1:80:80
)可以从外部访问。如果您将UFW配置为阻止此特定端口,则这也适用,因为Docker管理自己的iptables规则。阅读更多
$ docker run --expose 80 ubuntu bash
这将公开80
容器的端口,而不会将该端口发布到主机系统的接口。
设置环境变量(-e,-env,-env文件)
$ docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash
使用-e
,--env
和--env-file
标志来设定简单(非数组)环境变量在你正在运行的图像你正在运行的Dockerfile中定义的容器,或覆盖变量。
您可以在运行容器时定义变量及其值:
$ docker run --env VAR1=value1 --env VAR2=value2 ubuntu env | grep VAR
VAR1=value1
VAR2=value2
您还可以使用已导出到本地环境的变量:
export VAR1=value1
export VAR2=value2
$ docker run --env VAR1 --env VAR2 ubuntu env | grep VAR
VAR1=value1
VAR2=value2
运行该命令时,Docker CLI客户端会检查该变量在本地环境中具有的值,并将其传递给容器。如果没有=
提供,并且该变量未在您的本地环境中导出,则不会在容器中设置该变量。
您也可以从文件中加载环境变量。该文件应使用语法<variable>=value
(将变量设置为给定值)或
<variable>
(从本地环境获取值)和#
注释。
$ cat env.list
# This is a comment
VAR1=value1
VAR2=value2
USER
$ docker run --env-file env.list ubuntu env | grep VAR
VAR1=value1
VAR2=value2
USER=denis
在容器上设置元数据(-l,-label,-label-file)
标签是一key=value
对将元数据应用于容器的标签。要使用两个标签来标记容器,请执行以下操作:
$ docker run -l my-label --label com.example.foo=bar ubuntu bash
该my-label
键不指定这样的标签默认值为空字符串(""
)。要添加多个标签,请重复标签标志(-l
或--label
)。
的值key=value
必须唯一以避免覆盖标签值。如果您指定具有相同键但值不同的标签,则每个后续值都将覆盖前一个值。Docker使用key=value
您提供的最后一个。
使用该--label-file
标志可以从文件中加载多个标签。用EOL标记分隔文件中的每个标签。下面的示例从当前目录中的标签文件中加载标签:
$ docker run --label-file ./labels ubuntu bash
标签文件格式类似于加载环境变量的格式。(与环境变量不同,标签在容器内运行的进程不可见。)以下示例说明了标签文件格式:
com.example.label1="a label"
# this is a comment
com.example.label2=another\ label
com.example.label3
您可以通过提供多个--label-file
标志来加载多个标签文件 。
有关使用标签的更多信息,请参阅《 Docker用户指南》中的“标签-Docker中的自定义元数据”。
将容器连接到网络(--network)
启动容器时,请使用该--network
标志将其连接到网络。这会将busybox
容器添加到my-net
网络。
$ docker run -itd --network=my-net busybox
在用户定义的网络上启动容器时,还可以使用--ip
和--ip6
标志选择容器的IP地址。
$ docker run -itd --network=my-net --ip=10.10.9.75 busybox
如果要向网络添加正在运行的容器,请使用docker network connect
子命令。
您可以将多个容器连接到同一网络。连接后,容器可以轻松通信,只需要另一个容器的IP地址或名称即可。对于overlay
支持多主机连接的网络或自定义插件,连接到同一多主机网络但从不同引擎启动的容器也可以这种方式进行通信。
笔记
服务发现在默认网桥网络上不可用。默认情况下,容器可以通过其IP地址进行通信。要通过名称进行通信,必须将它们链接起来。
您可以使用以下docker network
disconnect
命令将容器与网络断开连接。
从容器挂载卷(--volumes-from)
$ docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd
该--volumes-from
标志从引用的容器挂载所有已定义的卷。容器可以通过重复--volumes-from
参数来指定。可以为容器ID可选地在卷的后缀之后:ro
或:rw
以只读或读写模式分别安装卷。默认情况下,卷以与引用容器相同的模式(读写或只读)挂载。
像SELinux这样的标签系统要求在安装到容器中的卷内容上放置正确的标签。没有标签,安全系统可能会阻止容器内运行的进程使用内容。默认情况下,Docker不会更改操作系统设置的标签。
要在容器上下文中更改标签,可以添加两个后缀:z
或:Z
将其添加
到卷安装中。这些后缀告诉Docker重新标记共享卷上的文件对象。该z
选项告诉Docker两个容器共享卷内容。结果,Docker使用共享的内容标签来标记内容。共享的卷标允许所有容器读取/写入内容。该Z
选项告诉Docker使用私有的未共享标签来标记内容。仅当前容器可以使用私有卷。
附加到STDIN / STDOUT / STDERR(-a)
该-a
标志告诉docker run
绑定到容器的STDIN
,STDOUT
或STDERR
。这使得可以根据需要操纵输出和输入。
$ echo "test" | docker run -i -a stdin ubuntu cat -
这会将数据通过管道传输到容器中,并仅通过附加到容器的ID来打印容器的ID STDIN
。
$ docker run -a stderr ubuntu echo test
除非出现错误,否则这将不会打印任何内容,因为我们仅附加到STDERR
了容器的。容器的日志仍存储已写入STDERR
和的内容STDOUT
。
$ cat somefile | docker run -i -a stdin mybuilder dobuild
这就是将文件管道传送到容器中以进行构建的方式。构建完成后,将打印容器的ID,并且可以使用检索构建日志docker logs
。如果您需要将文件或其他内容通过管道传输到容器中并在容器运行完毕后检索容器的ID,则此功能很有用。
将主机设备添加到容器(--device)
$ docker run --device=/dev/sdc:/dev/xvdc \
--device=/dev/sdd --device=/dev/zero:/dev/nulo \
-i -t \
ubuntu ls -l /dev/{xvdc,sdd,nulo}
brw-rw---- 1 root disk 8, 2 Feb 9 16:05 /dev/xvdc
brw-rw---- 1 root disk 8, 3 Feb 9 16:05 /dev/sdd
crw-rw-rw- 1 root root 1, 5 Feb 9 16:05 /dev/nulo
通常有必要将设备直接暴露于容器中。该--device
选项将启用该功能。例如,可以将特定的块存储设备或循环设备或音频设备添加到本来没有特权的容器中(不带--privileged
标志),并使应用程序直接访问它。
默认情况下,容器就可以read
,write
而mknod
这些设备。可以使用:rwm
每个--device
标志的第三组选项来覆盖它。如果容器以特权模式运行,则指定的权限将被忽略。
$ docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc
Command (m for help): q
$ docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc
You will not be able to write the partition table.
Command (m for help): q
$ docker run --device=/dev/sda:/dev/xvdc:rw --rm -it ubuntu fdisk /dev/xvdc
Command (m for help): q
$ docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc
fdisk: unable to open /dev/xvdc: Operation not permitted
笔记
该
--device
选件不能与临时设备一起安全使用。不得将可能会被删除的块设备添加到不受信任的容器中--device
。
对于Windows,传递给该--device
选项的字符串格式为--device=<IdType>/<Id>
。从Windows Server 2019和Windows 10 October 2018更新开始,Windows仅支持IdType
class
和Id作为设备接口类GUID。请参阅Windows容器文档中定义的表,以
获取容器支持的设备接口类GUID的列表。
如果为进程隔离的Windows容器指定了此选项,则在容器中 可使所有实现请求的设备接口类GUID的设备可用。例如,以下命令使主机上的所有COM端口在容器中可见。
PS C:\> docker run --device=class/86E0D1E0-8089-11D0-9CE4-08003E301F73 mcr.microsoft.com/windows/servercore:ltsc2019
笔记
--device
仅在进程隔离的Windows容器上支持该选项。如果容器隔离为,hyperv
或在Windows上运行Linux容器(LCOW)时,此选项将失败。
访问NVIDIA GPU
该--gpus
标志允许您访问NVIDIA GPU资源。首先,您需要安装nvidia-container-runtime。请访问指定容器的资源
以获取更多信息。
要使用--gpus
,请指定要使用的GPU(或全部)。如果未提供任何值,则使用所有可用的GPU。下面的示例展示了所有可用的GPU。
$ docker run -it --rm --gpus all ubuntu nvidia-smi
使用该device
选项指定GPU。下面的示例展示了一个特定的GPU。
$ docker run -it --rm --gpus device=GPU-3a23c669-1f69-c64e-cf85-44e9b07e7a2a ubuntu nvidia-smi
下面的示例展示了第一个和第三个GPU。
$ docker run -it --rm --gpus device=0,2 nvidia-smi
重新启动策略(-重新启动)
使用Docker--restart
来指定容器的重启策略。重新启动策略控制Docker守护程序在退出后是否重新启动容器。Docker支持以下重启策略:
政策 | 结果 |
---|---|
no |
退出时不要自动重启容器。这是默认值。 |
on-failure[:max-retries] |
仅当容器以非零退出状态退出时,才重新启动。(可选)限制Docker守护进程尝试重新启动的重试次数。 |
unless-stopped |
除非显式停止容器或Docker本身已停止或重新启动,否则请重新启动容器。 |
always |
无论退出状态如何,请始终重新启动容器。当您始终指定时,Docker守护程序将尝试无限期重启容器。无论容器的当前状态如何,该容器还将始终在守护程序启动时启动。 |
$ docker run --restart=always redis
这将以始终redis
为重启策略的方式运行该容器,
以便如果该容器退出,则Docker将重新启动它。
可 在Docker运行参考页面的重启策略(--restart)部分中找到有关重启策略的更多详细信息 。
将条目添加到容器主机文件(--add-host)
您可以/etc/hosts
使用一个或多个--add-host
标志将其他主机添加到容器的文件中。本示例为名为的主机添加静态地址
docker
:
$ docker run --add-host=docker:10.180.0.1 --rm -it debian
root@f38c87f2a42d:/# ping docker
PING docker (10.180.0.1): 48 data bytes
56 bytes from 10.180.0.1: icmp_seq=0 ttl=254 time=7.600 ms
56 bytes from 10.180.0.1: icmp_seq=1 ttl=254 time=30.705 ms
^C--- docker ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 7.600/19.152/30.705/11.553 ms
有时您需要从容器内部连接到Docker主机。要启用此功能,请使用该--add-host
标志将Docker主机的IP地址传递到容器。要查找主机的地址,请使用ip addr show
命令。
传递给您的标志ip addr show
取决于您在容器中使用的是IPv4还是IPv6网络。将以下标志用于名为的网络设备的IPv4地址检索eth0
:
$ HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print $2}' | cut -d / -f 1 | sed -n 1p`
$ docker run --add-host=docker:${HOSTIP} --rm -it debian
对于IPv6,请使用-6
标志而不是-4
标志。对于其他网络设备,请eth0
使用正确的设备名称替换(例如docker0
,桥接设备)。
在容器中设置ulimit(--ulimit)
由于ulimit
在容器中设置设置需要默认容器中不提供的额外特权,因此您可以使用该--ulimit
标志进行设置。
--ulimit
使用软限制和硬限制来指定,例如:
<type>=<soft limit>[:<hard limit>]
,例如:
$ docker run --ulimit nofile=1024:1024 --rm debian sh -c "ulimit -n"
1024
笔记
如果您不提供
hard limit
,则将soft limit
同时使用这两个值。如果未ulimits
设置,则它们将从ulimits
守护程序的默认设置继承。该as
选项现在被禁用。换句话说,不支持以下脚本:$ docker run -it --ulimit as=1024 fedora /bin/bash`
这些值将syscall
按照设置的值发送到适当的位置。Docker不执行任何字节转换。设置值时要考虑到这一点。
对于nproc
使用
请谨慎设置Linux设计nproc
的ulimit
标志,nproc
以设置用户(而不是容器)可用的最大进程数。例如,使用daemon
用户启动四个容器:
$ docker run -d -u daemon --ulimit nproc=3 busybox top
$ docker run -d -u daemon --ulimit nproc=3 busybox top
$ docker run -d -u daemon --ulimit nproc=3 busybox top
$ docker run -d -u daemon --ulimit nproc=3 busybox top
第四个容器失败,并报告“ [8]系统错误:资源暂时不可用”错误。之所以失败,是因为调用者集nproc=3
导致前三个容器用完了daemon
用户的三个进程配额集。
用信号停止容器(-停止信号)
该--stop-signal
标志设置将被发送到容器退出的系统调用信号。该信号可以是与内核syscall表中的位置匹配的有效无符号数字(例如9),也可以是格式为SIGNAME的信号名称(例如SIGKILL)。
可选的安全选项(--security-opt)
在Windows上,此标志可用于指定t