docker container create

描述创建一个新容器
用法docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]
别名
docker create

描述

docker container create(或简写:docker create)命令从指定的镜像创建一个新容器,但不启动它。

创建容器时,Docker 守护进程会在指定的镜像之上创建一个可写的容器层,并准备好运行指定的命令。容器 ID 会打印到 STDOUT。这与 docker run -d 类似,只是容器永远不会启动。然后你可以随时使用 docker container start(或简写:docker start)命令启动容器。

当你希望提前设置容器配置,以便在需要时随时启动容器时,这非常有用。新容器的初始状态是 created

docker create 命令的大多数选项与 docker run 命令共享(docker run 在启动容器之前会执行 docker create)。有关可用标志和选项的详细信息,请参阅docker run CLI 参考

选项

选项默认值描述
--add-host添加自定义主机到 IP 的映射 (host:ip)
--annotationAPI 1.43+ 为容器添加注解(传递给 OCI 运行时)
-a, --attach附加到 STDIN、STDOUT 或 STDERR
--blkio-weight块 IO(相对权重),范围在 10 到 1000 之间,或设置为 0 以禁用(默认值 0)
--blkio-weight-device块 IO 权重(相对设备权重)
--cap-add添加 Linux 能力
--cap-drop删除 Linux 能力
--cgroup-parent容器的可选父 cgroup
--cgroupnsAPI 1.41+ 要使用的 Cgroup 命名空间 (host|private)
'host': 在 Docker 主机的 cgroup 命名空间中运行容器
'private': 在容器自己的私有 cgroup 命名空间中运行
': 使用守护进程上由
default-cgroupns-mode 选项配置的 cgroup 命名空间(默认值)
--cidfile将容器 ID 写入文件
--cpu-countCPU 计数(仅限 Windows)
--cpu-percentCPU 百分比(仅限 Windows)
--cpu-period限制 CPU CFS(完全公平调度器)周期
--cpu-quota限制 CPU CFS(完全公平调度器)配额
--cpu-rt-periodAPI 1.25+ 限制 CPU 实时周期(单位:微秒)
--cpu-rt-runtimeAPI 1.25+ 限制 CPU 实时运行时(单位:微秒)
-c, --cpu-sharesCPU 份额(相对权重)
--cpusAPI 1.25+ CPU 数量
--cpuset-cpus允许执行的 CPU(0-3, 0,1)
--cpuset-mems允许执行的内存节点(0-3, 0,1)
--device添加主机设备到容器
--device-cgroup-rule添加规则到 cgroup 允许的设备列表
--device-read-bps限制从设备读取速率(字节/秒)
--device-read-iops限制从设备读取速率(IO/秒)
--device-write-bps限制写入设备速率(字节/秒)
--device-write-iops限制写入设备速率(IO/秒)
--disable-content-trusttrue跳过镜像验证
--dns设置自定义 DNS 服务器
--dns-option设置 DNS 选项
--dns-search设置自定义 DNS 搜索域
--domainname容器 NIS 域名
--entrypoint覆盖镜像的默认 ENTRYPOINT
-e, --env设置环境变量
--env-file读取包含环境变量的文件
--expose暴露端口或端口范围
--gpusAPI 1.40+ 要添加到容器的 GPU 设备('all' 表示传递所有 GPU)
--group-add添加要加入的附加组
--health-cmd用于检查健康状况的命令
--health-interval运行检查的间隔时间 (ms|s|m|h)(默认值 0s)
--health-retries报告不健康所需的连续失败次数
--health-start-intervalAPI 1.44+ 在启动期间运行检查的间隔时间 (ms|s|m|h)(默认值 0s)
--health-start-periodAPI 1.29+ 容器在开始 health-retries 计数之前进行初始化的启动周期 (ms|s|m|h)(默认值 0s)
--health-timeout允许一次检查运行的最长时间 (ms|s|m|h)(默认值 0s)
--help打印用法
-h, --hostname容器主机名
--initAPI 1.25+ 在容器内运行 init 进程,转发信号并回收僵尸进程
-i, --interactive即使未附加,也保持 STDIN 开放
--io-maxbandwidth系统驱动器的最大 IO 带宽限制(仅限 Windows)
--io-maxiops系统驱动器的最大 IOps 限制(仅限 Windows)
--ipIPv4 地址(例如,172.30.100.104)
--ip6IPv6 地址(例如,2001:db8::33)
--ipc要使用的 IPC 模式
--isolation容器隔离技术
--kernel-memory内核内存限制
-l, --label设置容器的元数据
--label-file读取包含标签的行分隔文件
--link添加链接到另一个容器
--link-local-ip容器 IPv4/IPv6 本地链接地址
--log-driver容器的日志驱动程序
--log-opt日志驱动程序选项
--mac-address容器 MAC 地址(例如,92:d0:c6:0a:29:33)
-m, --memory内存限制
--memory-reservation内存软限制
--memory-swap等于内存加上交换空间的交换限制:'-1' 表示启用无限交换空间
--memory-swappiness-1调整容器内存 swappiness (0 到 100)
--mount附加文件系统挂载到容器
--name为容器指定名称
--network将容器连接到网络
--network-alias为容器添加网络范围的别名
--no-healthcheck禁用容器指定的任何 HEALTHCHECK
--oom-kill-disable禁用 OOM Killer
--oom-score-adj调整主机的 OOM 偏好 (-1000 到 1000)
--pid要使用的 PID 命名空间
--pids-limit调整容器 pids 限制(设置为 -1 表示无限制)
--platformAPI 1.32+ 如果服务器支持多平台,则设置平台
--privileged为容器提供扩展权限
-p, --publish将容器端口发布到主机
-P, --publish-all将所有暴露的端口发布到随机端口
--pullmissing创建前拉取镜像 (always, missing, never)
-q, --quiet抑制拉取输出
--read-only以只读方式挂载容器的根文件系统
--restartno容器退出时应用的重启策略
--rm容器退出时自动删除容器及其关联的匿名卷
--runtime容器要使用的运行时
--security-opt安全选项
--shm-size/dev/shm 的大小
--stop-signal停止容器的信号
--stop-timeoutAPI 1.25+ 停止容器的超时时间(单位:秒)
--storage-opt容器的存储驱动程序选项
--sysctlSysctl 选项
--tmpfs挂载一个 tmpfs 目录
-t, --tty分配一个伪终端 (pseudo-TTY)
--ulimitUlimit 选项
-u, --user用户名或 UID(格式:<name|uid>[:<group|gid>])
--userns要使用的用户命名空间
--uts要使用的 UTS 命名空间
-v, --volume绑定挂载一个卷
--volume-driver容器的可选卷驱动程序
--volumes-from从指定容器挂载卷
-w, --workdir容器内的工作目录

示例

创建并启动一个容器

以下示例创建一个附加了伪终端 (pseudo-TTY) 的交互式容器,然后启动该容器并附加到它

$ docker container create -i -t --name mycontainer alpine
6d8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752

$ docker container start --attach -i mycontainer
/ # echo hello world
hello world

以上等同于 docker run

$ docker run -it --name mycontainer2 alpine
/ # echo hello world
hello world

初始化卷

容器卷在 docker create 阶段(即 docker run 也会)初始化。例如,这允许你 create data 卷容器,然后从另一个容器中使用它

$ docker create -v /data --name data ubuntu

240633dfbb98128fa77473d3d9018f6123b99c454b3251427ae190a7d951ad57

$ docker run --rm --volumes-from data ubuntu ls -la /data

total 8
drwxr-xr-x  2 root root 4096 Dec  5 04:10 .
drwxr-xr-x 48 root root 4096 Dec  5 04:11 ..

类似地,create 一个主机目录绑定挂载的卷容器,然后可以从后续容器中使用它

$ docker create -v /home/docker:/docker --name docker ubuntu

9aa88c08f319cd1e4515c3c46b0de7cc9aa75e878357b1e96f91e2c773029f03

$ docker run --rm --volumes-from docker ubuntu ls -la /docker

total 20
drwxr-sr-x  5 1000 staff  180 Dec  5 04:00 .
drwxr-xr-x 48 root root  4096 Dec  5 04:13 ..
-rw-rw-r--  1 1000 staff 3833 Dec  5 04:01 .ash_history
-rw-r--r--  1 1000 staff  446 Nov 28 11:51 .ashrc
-rw-r--r--  1 1000 staff   25 Dec  5 04:00 .gitconfig
drwxr-sr-x  3 1000 staff   60 Dec  1 03:28 .local
-rw-r--r--  1 1000 staff  920 Nov 28 11:51 .profile
drwx--S---  2 1000 staff  460 Dec  5 00:51 .ssh
drwxr-xr-x 32 1000 staff 1140 Dec  5 04:01 docker