使用SSH隧道推送Docker镜像至远程仓库失败,远程未同步
Docker镜像通过SSH隧道推送后远程仓库无镜像的排查方案
问题背景
通过SSH隧道将开发服务器上的Docker镜像推送至目标系统的Docker仓库(运行在443端口),隧道配置验证有效(关闭隧道时推送提示连接拒绝),但推送完成后远程系统中未找到该镜像。
隧道命令
ssh -L 10101:(IP Address):443 jump
操作过程
[user@devserver target (develop)]$ docker images | grep application program/application aee3b0c8c-08-17-2022-06-09-57-422 c79b292fdebd 5 hours ago 276MB [user@devserver target (develop)]$ docker tag program/application:aee3b0c8c-08-17-2022-06-09-57-422 localhost:10101/program/application:aee3b0c8c-08-17-2022-06-09-57-422 [user@devserver target (develop)]$ docker images | grep application program/application aee3b0c8c-08-17-2022-06-09-57-422 c79b292fdebd 5 hours ago 276MB localhost:10101/program/application aee3b0c8c-08-17-2022-06-09-57-422 c79b292fdebd 5 hours ago 276MB [user@devserver target (develop)]$ docker push localhost:10101/program/application:aee3b0c8c-08-17-2022-06-09-57-422 The push refers to repository [localhost:10101/program/application] 8c47cda4a82b: Layer already exists c51a173c1f9f: Layer already exists bc9669b66ca9: Layer already exists fa5795d612c9: Layer already exists 002c8b92d017: Layer already exists 9b0964cf7e12: Layer already exists a7318ad177b0: Layer already exists 3c85054ce964: Layer already exists 413ce048394c: Layer already exists 4117d2b8a3fe: Layer already exists 8d46ca9b4f93: Layer already exists 174f56854903: Layer already exists aee3b0c8c-08-17-2022-06-09-57-422: digest: sha256:63b0072cf4a45c805a32e025abdc8aed64d63936fdac81569c0cba10f43b4f26 size: 2831 [user@devserver target (develop)]$ docker images | grep application program/application aee3b0c8c-08-17-2022-06-09-57-422 c79b292fdebd 5 hours ago 276MB localhost:10101/program/application aee3b0c8c-08-17-2022-06-09-57-422 c79b292fdebd 5 hours ago 276MB
关闭隧道后的推送结果
[user@devserver target (develop)]$ docker push localhost:10101/program/application:aee3b0c8c-08-17-2022-06-09-57-422 The push refers to repository [localhost:10101/program/application] Get "http://localhost:10101/v2/": dial tcp [::1]:10101: connect: connection refused [user@devserver target (develop)]$
远程系统镜像查询结果
[root@system-2 scripts]# docker images -a | grep application [root@system-2 scripts]#
排查与解决步骤
1. 确认仓库登录状态与证书配置
- 私有仓库需先登录:如果目标是私有Docker仓库(如Harbor、Docker Registry),推送前必须完成登录。执行:
输入目标仓库的合法账号密码后重新推送。docker login localhost:10101 - 处理自签名HTTPS证书:目标仓库用443端口(HTTPS),若使用自签名证书,开发服务器的Docker需将
localhost:10101标记为不安全仓库:
编辑/etc/docker/daemon.json(Linux系统),添加:
重启Docker服务:{ "insecure-registries": ["localhost:10101"] }systemctl restart docker
2. 验证SSH隧道与仓库连通性
- 检查端口映射有效性:在jump服务器上执行,确认能访问目标仓库的443端口:
正常响应会返回curl https://(IP Address)/v2/{}或仓库API相关内容。 - 确认本地端口监听:在开发服务器上检查10101端口是否被SSH进程占用:
需显示netstat -tulpn | grep 10101ssh进程在监听该端口。
3. 检查目标仓库的日志与配置
- 查看仓库日志:登录目标系统,查看Docker仓库容器的日志,排查推送时的错误(如权限不足、存储满):
docker logs <registry-container-name> - 确认镜像命名规则:部分仓库要求镜像属于指定命名空间/项目,检查推送的标签是否符合仓库要求。
4. 开启调试模式推送
执行推送时添加--debug参数,查看详细交互日志,定位隐藏错误:
docker push --debug localhost:10101/program/application:aee3b0c8c-08-17-2022-06-09-57-422
内容的提问来源于stack exchange,提问作者georges
相关产品推荐
相关产品推荐

