Ubuntu server配置Docker Daemon.json 顽固不生效

news/2025/10/31 0:45:27/文章来源:https://www.cnblogs.com/zqingyang/p/19178422

序言:

搭建私有仓库,但是没有签名证书。由于docker要求必须走https,因此需要修改daemon.json。

摘要

本文详细记录了在 Ubuntu Server(ubuntu-24.04.3-live-server-amd64) 环境中,Docker 守护进程(dockerd)拒绝加载 /etc/docker/daemon.json 配置的疑难杂症。即使配置内容和权限都正确,问题依然存在。本文提供了一个从标准检查到强制 Systemd 覆盖的完整、专业的故障排除路径,帮助你解决 insecure-registries 等配置不生效的问题。


一、故障现象与工程逻辑分析

故障现象: /etc/docker/daemon.json 文件已创建并包含正确的 insecure-registries 配置,但执行 systemctl restart docker 后,docker info 命令显示该配置未被加载(Insecure Registries: 后面为空)。

核心推论: Docker 守护进程在启动时,要么找不到文件,要么找到了但无法解析,或者被更高优先级的配置或系统安全模块覆盖。


二、标准排查路径(排除基本错误)

在着手复杂修复前,必须排除 90% 的常见错误。

1. 检查配置文件的内容和格式 (Vim/Nano 陷阱)

确保您的 JSON 文件格式严格正确,这是最常见的失败原因。

步骤 命令 检查要点
文件内容 sudo cat /etc/docker/daemon.json 确保是有效的 JSON。最后一个键值对后不能有逗号
格式示例 json\n{\n "insecure-registries": [\n "192.168.1.100:57080"\n ]\n}\n
字符污染 确保没有 Vim/Nano 引入的不可见字符、UTF-8 空格或制表符。(我们使用 echo -eprintf 写入纯净内容来解决此问题)

2. 检查文件权限与所有权

Docker 守护进程以 root 权限运行,它必须能读取文件。

步骤 命令 检查结果
文件权限 ls -l /etc/docker/daemon.json 权限应为 -rw-r--r--
目录权限 ls -ld /etc/docker 所有者应为 root root,权限应为 drwxr-xr-x

3. 检查服务操作 (Systemd 流程)

必须按照正确的 Systemd 顺序进行操作。

步骤 命令 逻辑
重新加载 sudo systemctl daemon-reload 告诉 Systemd 重新扫描配置。
重启服务 sudo systemctl restart docker 重新启动 dockerd 守护进程。
验证 `docker info sed -n '/Insecure Registries/p'`

三、进阶排查与终极解决方案(绕过 Bug)

如果标准排查失败,问题极可能在于 dockerd 被 systemd 启动时,配置加载逻辑被环境 Bug 干扰。

1. 失败的控制变量法诊断

我们使用 log-opts 替换 insecure-registries,如果依然失败,则证明 daemon.json 文件本身在您的环境中根本没有被读取。

2. 终极解决方案:Systemd ExecStart 强制覆盖

既然配置文件失败,我们就强制 Systemd 在启动时,直接将配置作为命令行参数传递给 dockerd

步骤 1:启动 Systemd 编辑器

使用 EDITOR=vim 确保您用 Vim 打开文件,并准备进行精简操作。

sudo EDITOR=vim systemctl edit docker.service

步骤 2:在 Vim 中写入纯净的 ExecStart 覆盖

这是解决问题的关键步骤。您需要删除 systemctl edit 自动生成的所有注释和参考内容,只保留以下三行纯配置:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.1.100:57080 --insecure-registry nyat.app:12345
  • Vim 操作提示: 使用 :1,$d 清空文件,然后进入插入模式 (i) 粘贴配置。然后 :wq 保存退出。

步骤 3:重新加载并重启服务

sudo systemctl daemon-reload
sudo systemctl restart docker

逻辑: 这种方法彻底绕开了 daemon.json 文件解析,直接告诉 dockerd 携带这些参数启动。

3. 版本有问题!

如果仍然还不可以,那就是你安装docker的过程是参考的别人的博客,而博客内容有一定的错误。我这次就参考了安装,花费了很多小时,里里外外都排查了,甚至切换了不同版本的Linux系统仍然存在。
后面怀疑该docker教程(以前参考别人博客搭建的)有问题,于是通过控制变量法得出:兼容性有问题。

需要按照官方的教程重新安装,官方安装教程.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sunpinyin online的简单例子

sunpinyin online的简单例子#include <stdio.h> #include <sunpinyin.h>class WinHandler : public CIMIWinHandler {void enableDeferedUpdate(CIMIView* view, int waitTime) {}void disableDeferedUpda…

程序员修炼之道:从小工到专家

初入行业,多数人是 “代码搬运工”,能完成需求却难思深层逻辑。真正的突破,始于跳出 “实现工具” 思维。 要多问 “为何这么设计”,而非只做 “如何实现”;要主动复盘项目坑点,把经验转化为方法论;更要持续深耕…

microsoft edge webview离线安装包

microsoft edge webview2离线安装包&在线安装包 Microsoft Edge WebView2 控件允许在本机应用中嵌入 web 技术(HTML、CSS 以及 JavaScript)。

概率递推1

Problem 19.2025年7月16日-27日,第32届世界大学生运动会在德国举行。在比赛期间,运动员甲(来自中国)和运动员乙(来自澳大利亚)因赛事成为朋友。运动员甲持有一套熊猫主题的运动项目徽章,包含乒乓球、羽毛球、篮…

Revit Api打印当前项目的所有的可打印视图

Revit Api打印当前项目的所有的可打印视图打印当前文档中的可打印视图 public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements) {Do…

实验课收获2025.10.30

这几周的实验课密集地学习了几个经典算法:归并排序、切绳子问题、最长公共子序列和背包问题。有的理解起来很快,有的却让我卡壳了好久。 对我来说接受度比较高的:背包问题 背包问题的动态规划思路我接受得很快。老师…

DW1000芯片帧组成解析

对DW1000链路层协议帧格式进行简单介绍。概述 在物联网定位与数据传输场景中,DW1000 作为遵循 IEEE802.15.4-2011 UWB 标准的芯片,其核心数据传输载体是 “帧”。它像一个精密的 “快递包裹”,通过三层结构(同步头…

revit api测量距离

revit api测量距离根据起始点,和方向向量,创建模型线,获取距离这里的方向是向上的,可以根据自己的需要修改using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using System;[T…

《程序员修炼之道》第一章有感

《程序员修炼之道》第一章有感翻开《程序员修炼之道》第一章,瞬间跳出了“完成任务就够了”的误区。程序员不是单纯写功能的,更要主动打磨代码、想着优化提升。这场职业修炼,从认真对待每一行代码开始。

10月30日日记

1.今天上体育课学习三步上篮,和学习数据结构 2.明天休息 3.数据库索引为什么多用B+树而不是哈希表

代码大全2阅读笔记(3)

一、开篇:别让 “交付” 成为代码质量的终点 读完《代码大全 2》的维护与优化章节,最颠覆认知的一句话是:“代码的生命周期中,编码只占 20%,剩下 80% 的时间都在维护与迭代”。很多时候我们把 “代码能运行、功能…

rustdesk 下载Windows版

蓝奏云下载 rustdesk-1.4.3-x86_64.exe rustdesk-1.4.2-x86_64.exe rustdesk-1.4.1-x86_64.exe 旧版下载 rustdesk-1.4.0-x86_64.exe最新版随github更新

apue笔记-进程环境、进程控制、进程关系

原文博客:https://nosae.top进程环境 C程序总是从main函数开始执行,内核在调用main之前会调用一个特殊的启动例程,由这个例程去调用main。这个例程如果用C代码来写(一般是用汇编来写),那就是exit(main(argc, arg…

数字识别(非汉字版)

1 训练 import torch from torch.utils.data import DataLoader from torchvision import transforms from torchvision.datasets import MNIST import matplotlib.pyplot as plt import matplotlib import numpy as …

Rust 解析验证码:结合 Tesseract OCR 进行文本识别

环境准备 1.1 安装 RustRust 可通过官方的 rustup 进行安装: curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh 更多内容访问ttocr.com或联系1436423940 安装完成后,检查 Rust 是否可用: rustc --ver…

UML图以及设计模式部分总结

今天将软考内容中的UML统一建模语言和设计模式的部分内容进行了复习,具体内容总结如下: 1.类图,用例图,序列图,通信图,状态图:状态图强调一个对象行为的事件顺序,包括初态中间态以及终态, 初态只有一个,而终…

Consul访问宿主机api项目失败 - binzi

最近在学习consul,在docker上启动consul实例后。本地有一个.net core api项目,项目主要是实现启动就向consul注册及有一个心跳检查,启动调试后可以看到已经成功向consul注册了服务,就是心跳检查一直不成功,最后不…

读《代码大全2》第一章有感

读《代码大全2》第一章有感以前总觉得代码能跑起来就行,读了《代码大全2》第一章才发现,好代码远不止于此。可读性、可维护性才是关键,那些随意的命名和缺失的注释,其实都是后续的麻烦。新手入门,先把规范记牢准没…

251030

251030寒冷的夜里,如果不是有特别的理由没人会待在街上,大家都有不惜牺牲自己也要得到的东西,这种感觉就像是费劲千辛万苦地蒸发自己,让自己动起来去触碰不动的东西,所以视觉是很宝贵的,但听觉却是多余的,聋哑真…