--name 必须在 docker run 创建容器时指定,名称全局唯一且不可重复;顺序需在镜像名前,否则被误作容器内命令;冲突或遗漏将导致启动失败或使用随机名。

docker run 时用 --name 指定名称最直接
容器名称必须在创建时就确定好,否则后续要改名会多一步操作。最稳妥的做法是在 docker run 命令里加 --name 参数,比如:
docker run -d --name my-nginx -p 8080:80 nginx:latest
这样启动后容器名就是 my-nginx,不是随机生成的 romantic_hopper 那种。注意:--name 必须放在镜像名之前,顺序错会导致参数被当成命令传给容器进程。
常见错误现象:
-
docker: Error response from daemon: Conflict. The container name "/my-nginx" is already in use.→ 说明名字已被占用(包括已停止的容器) - 执行后
docker ps看不到新容器 → 检查是否漏了-d,或容器启动即退出(比如没前台进程)
docker create 后再 docker start 也能设名
如果你需要先配置再启动(比如挂载复杂卷、设置重启策略),可以用 docker create 分两步走:
docker create --name db-prod -e MYSQL_ROOT_PASSWORD=123 -v /data/mysql:/var/lib/mysql -p 3306:3306 --restart=unless-stopped mysql:8.0
这条命令只创建容器,不运行;之后用 docker start db-prod 启动即可。相比 run,create 更适合脚本化部署或需要精细控制生命周期的场景。
关键差异点:
-
docker create不支持-it这类交互参数(它不启动) - 所有网络、卷、环境变量等配置项,
create和run完全一致,只是少了自动启动这步 - 如果忘记
--name,后续只能靠docker rename补救(见下一条)
容器已存在?用 docker rename 改名
对已经创建但没命名(或名字难记)的容器,用 docker rename 是唯一原生命令。它不要求容器停止,运行中也能改:
docker rename 7f3a1e5b8c9d frontend-api
其中 7f3a1e5b8c9d 是容器 ID(可用 docker ps -a 查),frontend-api 是新名。新名必须满足:小写字母/数字/下划线/短横线、不以短横线开头或结尾、全局唯一(包括已停止容器)。
容易踩的坑:
- 执行后
docker ps看不到变化?检查是否输错了 ID 或名字拼写,或新名已被占用 - 改名后 compose 文件或脚本里硬编码的旧名失效 → 所有外部引用(如
--link、监控标签、日志路径)都得手动更新 - 容器在 Docker 网络里被其他容器通过名字访问?改名后 DNS 缓存可能未刷新,建议连带重启依赖方
Docker Desktop 图形界面里没法直接设名
Docker Desktop 的 GUI 启动容器功能(点击 “Run”)不提供输入名称的字段,它只会用默认随机名。想用图形界面又想要固定名,只有两个办法:
一是在 CLI 创建好带 --name 的容器后,GUI 里就能看到对应名称;二是用 Docker Compose —— 在 docker-compose.yml 里写死 container_name,然后点 GUI 的 “Compose Up”。
例如:
services:
api:
image: python:3.11
container_name: backend-api
这种写法比纯 CLI 更适合团队协作,但要注意:container_name 会绕过 Compose 自动命名机制,同一份文件不能 up 多次(除非加 --scale 或换项目名)。
真正容易被忽略的是:Docker Desktop 的“Quick Start” 或 “Import Container” 功能完全不暴露命名入口,别指望点几下鼠标就能设名——CLI 才是设名的事实标准。











