服务器上执行 docker pull nginx,卡在 pulling 半天不动,最后超时。多数人第一反应是网络坏了,其实要先弄清楚请求发到了哪个仓库。
仓库、镜像、容器别混
仓库是存镜像的地方,英文 registry。镜像是一个只读模板,容器是镜像跑起来的实例。一个仓库里可以放很多镜像,每个镜像用名字和标签区分,比如 nginx:1.25 和 nginx:latest。
镜像地址怎么读
完整写法是 仓库地址/命名空间/镜像名:标签。不写仓库地址时默认去 Docker Hub,不写标签时默认 latest。公司内部仓库可能长这样:registry.example.com/team/api:v1.2。看到地址里带域名,基本就是私有仓库。
公共仓库和私有仓库
Docker Hub 是最常用的公共仓库,官方镜像和社区镜像都在上面。私有仓库常见的有 Harbor 和 registry,企业用来存内部镜像,带权限控制和漏洞扫描。Harbor 适合团队,registry 适合临时用,部署一个容器就能跑。
pull 超时怎么查
- 先看 docker info 里的 Registry Mirrors 有没有配加速地址。
- 确认镜像名有没有写错,私有仓库要先把域名加到 insecure-registries 或配好证书。
- 公司网络要走代理的,给 Docker 服务单独配 HTTP_PROXY,只在命令行 export 不够。
- 磁盘满了也会报错,先 df -h 看一眼。
仓库是 Docker 的地基。搞清楚镜像从哪来、标签是什么,比盲目换加速器有用。