docker run 是唯一可靠方式,GUI 创建易漏配端口/卷/环境变量,必须用 docker images 确认镜像、带 -d --name -p 等关键参数,并通过 docker logs 和 docker exec 排查启动问题。

docker run 是唯一可靠的方式,没有“在 GUI 里点几下就能安全创建容器”的替代路径。Docker Desktop 的图形界面(Containers → Run new container)只是封装了 docker run 命令,且默认参数不透明、端口/卷/网络配置容易漏设,新手直接点“Run”极易创建出无法访问、无法复现、甚至启动失败的容器。
用 docker run 创建容器前必须确认镜像存在
GUI 界面里看到的 “Images” 列表可能滞后或未刷新,docker images 才是真实状态:
- 运行
docker images,确认目标镜像已拉取(如nginx:alpine),没有则先docker pull nginx:alpine - 注意镜像 ID 和标签是否匹配你预期——
nginx默认是nginx:latest,但某些项目明确要求nginx:1.25 - 如果镜像名含斜杠(如
myorg/myapp:v1.2),说明它来自私有仓库,需确保已docker login并能解析该 registry 地址
docker run 必带的四个关键参数不能省
只写 docker run nginx 会创建一个立即退出的容器(因为 Nginx 默认前台运行,但没挂载配置/没暴露端口,主进程秒退)。真正可用的最小命令至少包含:
-
-d:后台运行,否则终端被占住,Ctrl+C 就 kill 容器 -
--name my-nginx:显式命名,避免 Docker 自动分配难记的名字(如eloquent_morse),后续操作全靠这个名字 -
-p 8080:80:端口映射,左边是宿主机端口(不能被占用),右边是容器内服务监听端口;多个端口用多个-p,如-p 8080:80 -p 8443:443 -
nginx:alpine:镜像名+标签,必须完整,不能只写nginx(除非你确定latest符合需求)
示例:docker run -d --name my-nginx -p 8080:80 nginx:alpine
GUI 创建容器时最常踩的三个坑
Docker Desktop 点击 “Run new container” 后弹出的表单看着友好,但以下问题几乎必现:
- “Port forwarding” 输入框默认为空,不手动填就等于没映射端口——容器跑着,但浏览器打不开
localhost:8080 - “Volumes” 标签页里,即使你勾选了 “Auto-create volume”,也不会自动把代码目录挂进去;要挂载本地文件夹,必须手动填
/path/on/host:/path/in/container,路径错一个字符就挂载失败 - “Environment variables” 字段只支持键值对输入,但某些镜像(如
postgres)依赖POSTGRES_PASSWORD等变量,漏设会导致容器反复重启或初始化失败
容器启动后第一件事不是打开浏览器,而是查日志
哪怕 docker ps 显示状态是 Up 2 seconds,也不代表服务就绪。Nginx 可能因配置错误崩溃,PostgreSQL 可能卡在初始化。
- 立刻执行
docker logs my-nginx,看是否有nginx: [emerg]或failed to start类报错 - 如果日志空或只有启动信息,再进容器检查进程:
docker exec -it my-nginx ps aux | grep nginx - 发现异常后别急着重启,先
docker stop my-nginx && docker rm my-nginx彻底清理,再用修正后的docker run重建
端口冲突、挂载路径权限不对、环境变量拼写错误——这些问题不会在 GUI 表单里标红提醒,只能靠日志和 docker inspect 排查。











