docker create 本质是“造好但不点火”,仅创建配置完备的待启动容器实例,状态为 created,不运行进程、不分配网络、不执行命令;适用于需分离创建与启动、复用配置或批量预置的场景。

用 docker create 预先生成容器实例,本质是“造好但不点火”——它只完成配置和初始化,不启动进程,也不分配网络或运行命令。
核心作用:分离创建与启动
适合需要精细控制启动时机、复用配置、或批量预置容器的场景。比如提前挂载卷、设置环境变量、绑定端口,等所有参数确认无误后再统一启动。
- 执行后容器状态为 Created(不是 Running)
- 不会产生日志、不会占用端口、不执行 CMD/ENTRYPOINT
- 可反复
docker start启动,也可docker rm删除而不影响镜像
常用参数组合示例
以下命令创建一个带名字、端口映射、卷挂载和环境变量的 Nginx 容器,但不运行:
docker create \ --name my-nginx \ -p 8080:80 \ -v /host/www:/usr/share/nginx/html:ro \ -e TZ=Asia/Shanghai \ nginx:alpine
-
--name:指定易记名称,避免用长 ID 管理 -
-p:预设端口映射,启动后自动生效(不启动时端口不被占用) -
-v:绑定宿主机目录,路径在创建阶段就校验是否存在(若不存在会自动创建空目录) -
-e:注入环境变量,启动时由容器内进程读取
后续操作衔接
创建成功后,用这些命令管理这个“待命”容器:
-
docker start my-nginx:启动它,状态变为 Running -
docker inspect my-nginx:查看完整配置,包括网络 IP、挂载详情、生效的环境变量 -
docker logs my-nginx:首次启动后才有日志可查;创建阶段无日志 -
docker start -a my-nginx:前台启动并附着(类似 run 的行为),适合调试
注意几个常见误区
docker create 不等于“准备文件系统”,也不格式化磁盘:
- 它不创建或选择 ext4/xfs 等底层文件系统——容器根文件系统直接继承自镜像的只读层 + 一层空的可写层(由 Docker 存储驱动如 overlay2 自动管理)
- 需要特定文件系统(如 XFS 日志特性),应在宿主机上预先格式化好块设备,再通过
--mount type=bind或--volume挂载进去 - 不能用
create命令给容器“预装软件”或“初始化数据库”——那些必须在容器启动后,靠 CMD、entrypoint 或外部脚本完成











