1. 首页 > 技术教程 > 正文

常用命令清单:Pull/Run/Exec 让容器管理变得丝滑

常用命令清单:Pull/Run/Exec 让容器管理变得丝滑

在服务器运维中,Docker 是绕不开的工具。不管你是刚接触 Linux 教程的新手,还是管理着几十台 VPS 的老手,`docker pull`、`docker run`、`docker exec` 这三个命令几乎是每天都要敲的。本文直接给出一份实战命令清单,附带常见报错和排障思路,让你在主机选上看到的每一行都能直接用。

常用命令清单:Pull/Run/Exec 让容器管理变得丝滑的图片

核心命令实战:Pull、Run、Exec 的正确用法

Pull:拉取镜像时容易踩的两个坑

`docker pull` 是从仓库拉取镜像的基础命令,但新手经常在版本标签上翻车。

拉取最新版 Nginx 镜像(不指定标签默认 latest)

docker pull nginx

拉取指定版本,比如 1.25.3

docker pull nginx:1.25.3

拉取官方仓库的 Ubuntu 22.04

docker pull ubuntu:22.04

常见报错:`manifest for xxx not found`。这通常是你写的镜像标签不存在,去 Docker Hub 查一下具体版本号再改。

老鸟叮嘱:生产环境不要用 `latest` 标签。`latest` 指向的版本会随上游更新变化,哪天拉下来一个不兼容的版本,容器起不来你都不知道原因。一定要指定明确版本号。

Run:启动容器时参数顺序有讲究

`docker run` 参数多,顺序错了可能导致权限问题或端口映射失败。下面是一个典型的生产级启动命令:

启动一个 Nginx 容器,映射端口、挂载配置、设置重启策略

docker run -d \
–name my-nginx \
-p 80:80 \
-p 443:443 \
-v /data/nginx/html:/usr/share/nginx/html:ro \
-v /data/nginx/conf:/etc/nginx/conf.d:ro \
–restart unless-stopped \
nginx:1.25.3

参数解释:

• `-d`:后台运行(detach),不占用终端。

• `–name`:给容器起个名字,方便后续管理。

• `-p`:宿主机端口:容器端口,注意不要写反。

• `-v`:挂载卷,`:ro` 表示只读,防止容器内误改配置。

• `–restart unless-stopped`:除了手动停止,否则自动重启。

常见报错:`port is already allocated`。端口被占用了,用 `netstat -tlnp | grep :80` 查一下哪个进程在用,关掉冲突服务再试。

Exec:进入容器后别乱改文件

`docker exec` 用于在运行中的容器里执行命令,最常见的场景是进容器查日志或调试。

进入容器交互式 Shell(如果容器没装 bash 就用 sh)

docker exec -it my-nginx bash

不进入容器,直接执行单条命令

docker exec my-nginx cat /var/log/nginx/access.log | tail -20

在容器里安装临时工具(不建议频繁操作)

docker exec -it my-nginx apt-get update && apt-get install -y vim

老鸟叮嘱:容器本质上是临时环境,每次重启都会重置非持久化数据。如果你用 `exec` 进容器改文件,记得同时修改宿主机上挂载的配置文件,否则下次 `docker restart` 后修改就没了。另外,`apt-get install` 这类操作会增大镜像层,建议把需要的东西写进 Dockerfile 重新构建。

排障区:Pull/Run/Exec 常见报错处理

拉取镜像超时,镜像拉不下来怎么办?

国内服务器拉 Docker Hub 镜像经常超时,尤其是 VPS 在境外机房时网络不稳定。解决办法:配置镜像加速器。

修改 Docker daemon 配置(以 /etc/docker/daemon.json 为例)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF

重启 Docker 使配置生效

sudo systemctl daemon-reload
sudo systemctl restart docker

重新尝试拉取

docker pull nginx:1.25.3

注意:不同云服务商的镜像加速地址不一样,阿里云用户用 `https://xxxx.mirror.aliyuncs.com`(xxxx 是你的专属 ID),腾讯云用上面那个就行。如果你用其他 VPS 厂商,去官方文档查一下。

容器启动后马上退出,怎么回事?

最常见的原因是前台进程没有保持住。`docker run` 默认容器执行完命令就退出,所以必须让容器跑一个前台进程。

错误示范:Ubuntu 容器启动后直接退出

docker run ubuntu:22.04

正确做法:用 -it 保持终端交互,或者指定一个前台命令

docker run -it ubuntu:22.04 bash

如果是 Nginx 等 Web 服务,确保 CMD 或 ENTRYPOINT 是前台模式

docker run -d nginx:1.25.3 # Nginx 默认前台运行,没问题

排障命令:`docker logs <容器名>` 查看启动日志,看最后几行报错信息。比如 Nginx 配置语法错误,日志里会直接告诉你哪行写错了。

FAQ:容器管理常见问题解答

Q1:docker pull 拉取镜像速度很慢怎么办?

配置镜像加速器,方法见上面排障区。如果加速器也不管用,考虑换一个镜像源,或者用 `docker pull` 时加上 `–platform` 参数指定架构(比如 `linux/amd64`),有时能避开某些慢速节点。

Q2:docker run 时端口映射后,外部还是访问不了是什么原因?

三步排查法:第一步,检查宿主机防火墙是否放行了映射端口,`firewall-cmd –list-ports` 或 `iptables -L -n`;第二步,确认容器内服务是否监听了正确端口,`docker exec 容器名 netstat -tlnp`;第三步,检查云服务商的安全组规则,VPS 厂商的防火墙默认全关,需要手动放行。

Q3:docker exec 进入容器后,提示 command not found 怎么办?

容器镜像为了精简体积,很多基础工具没装。比如 ` 不存在就换 `,`ping` 不存在就用 `cat /etc/hosts` 临时查。实在需要工具,用 `apt-get update && apt-get install -y <包名>` 临时安装,但记得这不是持久化方案。

Q4:docker pull 提示 no basic auth credentials 是什么原因?

这是因为你尝试拉取私有仓库的镜像但没有登录。用 `docker login` 先登录,或者确认镜像标签是否写对了公有仓库的路径。如果是自建私有仓库,检查 `daemon.json` 里的 insecure-registries 配置。

Q5:docker run 时指定了 –restart always,但容器还是没自动重启?

检查容器退出状态码。`docker ps -a` 查看 STATUS 列,如果显示 `Exited (137)` 表示被系统 OOM 杀死了,`–restart` 策略在 OOM 场景下可能不生效。解决方案是增加内存限制:`docker run -m 512m`。另外,`docker stop` 手动停止的容器不会自动重启,这是设计行为。

Q6:docker exec 执行命令后,容器会重启吗?

不会。`docker exec` 只是在运行中的容器里新开一个进程,不影响主进程。除非你执行的命令把主进程杀死了(比如在容器内 `kill 1`),那容器就会退出。正常调试不会影响容器运行状态。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9501.html 商家投稿邮箱:zhujixuanblog@qq.com