docker login 必须显式指定含协议和端口的完整 server 地址,如 docker login http://192.168.1.100:5000 或 docker login https://harbor.example.com:8443;http 仓库还需在 /etc/docker/daemon.json 中配置 insecure-registries 并重启 docker。

直接在 docker login 命令中指定非标准端口和协议,关键在于把完整地址(含协议、IP/域名、端口)作为 SERVER 参数传入。Docker 默认用 HTTPS,但如果你连的是 HTTP 服务(比如本地测试仓库),必须显式写 http:// 前缀,否则会默认走 HTTPS 并失败。
明确写出协议和端口
命令格式是:docker login [OPTIONS] SERVER
其中 SERVER 必须包含协议头和端口(如果非 443 或 80)。
- 连 HTTP 协议 + 非 80 端口(如 5000):
docker login http://192.168.1.100:5000 - 连 HTTPS 协议 + 非 443 端口(如 8443):
docker login https://harbor.example.com:8443 - 连 HTTP 协议 + 默认 80 端口可省略端口,但协议不能省:
docker login http://registry.local
前提:Docker 守护进程要允许非 HTTPS 仓库
如果 SERVER 是 http:// 地址,Docker daemon 默认拒绝连接。需提前在 /etc/docker/daemon.json 中配置不安全仓库列表:
- 编辑或创建
/etc/docker/daemon.json,加入: {"insecure-registries": ["192.168.1.100:5000"]}- 保存后重启 Docker:
sudo systemctl restart docker
用户名密码可直接传参(避免交互)
适合脚本或 CI 场景,避免手动输入:
docker login -u admin -p mypass http://192.168.1.100:5000- 注意:密码明文出现在命令行历史里,生产环境慎用;更安全的方式是让 Docker 提示输入,或使用
docker-credential-helper
验证是否生效
登录成功后,凭证会存进 ~/.docker/config.json,对应条目类似:
"http://192.168.1.100:5000": { "auth": "base64-encoded-credentials" }
之后 docker pull 或 docker push 时,只要镜像名带相同前缀(如 192.168.1.100:5000/myapp:v1),就会自动复用该凭证。











