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 create)共享。有关可用标志和选项的详细信息,请参阅 docker run CLI 参考。
选项
| 选项 | 默认值 | 描述 |
|---|---|---|
--add-host | 添加自定义主机到 IP 映射 (host:ip) | |
--annotation | API 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 | |
--cgroupns | API 1.41+ 要使用的 Cgroup 命名空间(host|private) 'host':在 Docker 主机的 cgroup 命名空间中运行容器 'private':在自己的私有 cgroup 命名空间中运行容器 '':使用守护进程上 default-cgroupns-mode 选项配置的 cgroup 命名空间(默认) default-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 实时运行时间(微秒) | |
-c, --cpu-shares | CPU 共享(相对权重) | |
--cpus | API 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-trust | true | 跳过镜像验证 |
--dns | 设置自定义 DNS 服务器 | |
--dns-option | 设置 DNS 选项 | |
--dns-search | 设置自定义 DNS 搜索域 | |
--domainname | 容器 NIS 域名 | |
--entrypoint | 覆盖镜像的默认 ENTRYPOINT | |
-e, --env | 设置环境变量 | |
--env-file | 从文件读取环境变量 | |
--expose | 公开端口或端口范围 | |
--gpus | API 1.40+ 要添加到容器的 GPU 设备('all' 表示传递所有 GPU) | |
--group-add | 添加要加入的额外组 | |
--health-cmd | 运行以检查健康的命令 | |
--health-interval | 运行检查之间的时间间隔 (ms|s|m|h) (默认 0s) | |
--health-retries | 报告不健康状态所需的连续失败次数 | |
--health-start-interval | API 1.44+ 在启动期间运行检查之间的时间间隔 (ms|s|m|h) (默认 0s) | |
--health-start-period | API 1.29+ 容器在开始健康重试倒计时之前初始化的启动周期 (ms|s|m|h) (默认 0s) | |
--health-timeout | 允许一次检查运行的最长时间 (ms|s|m|h) (默认 0s) | |
--help | 打印用法 | |
-h, --hostname | 容器主机名 | |
--init | API 1.25+ 在容器内部运行一个 init 进程,用于转发信号并回收进程 | |
-i, --interactive | 即使未连接也保持 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 | 内核内存限制 | |
-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 | 调整容器内存交换性(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 表示无限制) | |
--platform | API 1.32+ 如果服务器支持多平台,则设置平台 | |
--privileged | 为此容器授予扩展权限 | |
-p, --publish | 将容器的端口发布到主机 | |
-P, --publish-all | 将所有暴露的端口发布到随机端口 | |
--pull | 丢失 | 创建前拉取镜像(`always`、`|missing`、`never`) |
-q, --quiet | 抑制拉取输出 | |
--read-only | 将容器的根文件系统挂载为只读 | |
--restart | no | 容器退出时应用的重启策略 |
--rm | 容器退出时自动删除容器及其关联的匿名卷 | |
--runtime | 用于此容器的运行时 | |
--security-opt | 安全选项 | |
--shm-size | /dev/shm 的大小 | |
--stop-signal | 停止容器的信号 | |
--stop-timeout | API 1.25+ 停止容器的超时时间(秒) | |
--storage-opt | 容器的存储驱动程序选项 | |
--sysctl | Sysctl 选项 | |
--tmpfs | 挂载 tmpfs 目录 | |
-t, --tty | 分配一个伪 TTY | |
--ulimit | Ulimit 选项 | |
--use-api-socket | 实验性 (CLI) 绑定挂载 Docker API 套接字和所需的身份验证 | |
-u, --user | 用户名或 UID (格式: <name|uid>[:<group|gid>]) | |
--userns | 要使用的用户命名空间 | |
--uts | 要使用的 UTS 命名空间 | |
-v, --volume | 绑定挂载一个卷 | |
--volume-driver | 容器的可选卷驱动程序 | |
--volumes-from | 从指定的容器挂载卷 | |
-w, --workdir | 容器内的工作目录 |
示例
创建并启动容器
以下示例创建了一个附加伪 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