启动本地构建的Docker容器时为何调用registry-1.docker.io并报错?
问题解决步骤
1. 强制使用本地镜像,阻断远程拉取
在你的docker-compose.yml的m2v服务中添加pull_policy: never配置,明确要求Docker仅使用本地已存在的镜像,禁止向远程仓库发起拉取请求:
services: m2v: image: local/m2v-debug:master_NR pull_policy: never # 新增此行,强制使用本地镜像 container_name: m2v_1.0.4_debug # 其余配置保持不变
添加后重新执行docker-compose up -d,即可跳过对Docker Hub的访问,避免触发TLS密码套件错误。
2. 验证本地镜像的有效性
执行以下命令检查本地镜像是否能被Docker正常识别:
docker inspect local/m2v-debug:master_NR
若命令返回完整的镜像元数据,说明本地镜像状态正常;若报错,则需检查镜像名称拼写是否有误,或重新构建镜像。
3. 排查全局拉取策略配置
检查Docker daemon的全局配置文件/etc/docker/daemon.json,如果存在pull_policy字段且值为always,会强制Docker每次启动都拉取镜像,将其修改为missing(仅本地无对应镜像时才拉取):
{ "pull_policy": "missing" }
修改后重启Docker服务:
systemctl restart docker
4. 处理TLS密码套件兼容问题(若需与Docker Hub通信)
如果后续需要从Docker Hub拉取其他镜像,可通过以下方式解决TLS错误:
- 升级Docker版本:对比同事虚拟机的Docker版本,将生产服务器的Docker升级至相同或最新稳定版,新版本通常兼容更多TLS密码套件。
- 调整系统TLS配置:编辑
/etc/ssl/openssl.cnf,参考同事虚拟机的配置调整密码套件列表,确保包含Docker Hub支持的套件,修改后重启Docker服务。
5. 排除docker-compose以外的问题
若上述操作无效,直接用docker run启动本地镜像验证:
docker run -d --name m2v_test local/m2v-debug:master_NR
如果此命令成功,说明问题出在docker-compose的配置或环境中,可进一步检查docker-compose版本是否与同事一致。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

