Docker系列(二):开机自启动与基础配置、镜像加速器优化与疑难排查指南
引言
docker 的快速部署与高效运行依赖于两大核心环节:基础环境搭建与镜像生态优化。本期博文从零开始,系统讲解 docker 服务的管理配置与镜像加速实践。第一部分聚焦 docker 服务的安装、权限控制与自启动设置,确保环境稳定可用;第二部分深入 镜像源的配置策略与故障排查,解决国内网络环境下的镜像拉取瓶颈。通过遵循本文指引,各位观众老爷将掌握 docker 环境初始化、权限管理及镜像加速的全流程技能,为容器化开发运维构建高效、可靠的基础平台。
最后,如果大家喜欢我的创作风格,请大家多多关注up主,你们的支持就是我创作最大的动力!如果各位观众老爷觉得我哪些地方需要改进,请一定在评论区告诉我,马上改!在此感谢大家了。
各位观众老爷,本文通俗易懂,快速熟悉Docker,收藏本文,关注up不迷路,后续将持续分享Docker纯干货(请观众老爷放心,绝对又干又通俗易懂)。请多多关注、收藏、评论,评论区等你~~~
文章目录
- 引言
- 一、docker 服务安装与基础配置
- 1.1 启动docker服务
- 1.1.1 初次启动docker
- 1.1.2 设置开机自启动
- 1.2 免 `sudo` 运行 docker 及验证
- 1.2.1 添加 docker 用户组( 可选,推荐!)
- 1.2.2 验证是否生效
- 二、Docker 镜像源配置与加速
- 2.1 镜像源的作用与必要性
- 2.1.1 镜像源是什么?有什么作用
- 2.1.2 为什么要修改默认镜像源
- 2.2 配置镜像源
- 2.2.1 准备工作
- 2.2.2 修改 `daemon.json` 配置文件
- 2.2.3 重启 docker 服务使配置生效
- 2.2.4 验证镜像源配置
- 2.3 常见问题与解决办法
- 2.3.1 配置文件格式错误
- 2.3.2 镜像源未生效
- 往期回顾 --- 往期专栏 和 系列博文
一、docker 服务安装与基础配置
本章节将涵盖从服务初始化到日常使用的关键步骤。内容包括 docker 服务的启动与开机自启设置,确保环境持久可用;同时详解 免 sudo 运行 docker 的权限配置方案,通过用户组管理提升操作便捷性。通过遵循本章指引,各位观众老爷可快速搭建 docker 基础环境,解决权限依赖问题,为后续容器化操作奠定高效、安全的基础。
1.1 启动docker服务
1.1.1 初次启动docker
- 检查状态(确认是否运行)
sudo systemctl status docker# 退出请按 q
如下图所示,这是我的docker状态:
- 启动docker服务
sudo systemctl start docker
- 停止docker服务(如需)
sudo systemctl stop docker
注释: 以下是使用表格形式整理的 sudo systemctl start docker
命令解析
部分 | 作用 | 补充说明 |
---|---|---|
sudo | 以超级用户(root)权限执行后续命令。 | 普通用户需通过 sudo 提升权限才能管理系统服务。 |
systemctl | Systemd 系统和服务管理器的控制工具,用于管理服务、挂载点等。 | Systemd 是现代 Linux 发行版的默认初始化系统,负责启动和管理进程。 |
start | 启动指定的服务单元。 | 其他常用操作: - stop :停止服务- restart :重启服务- enable :开机自启- status :查看状态 |
docker | 目标服务单元名称(对应 docker.service 文件),启动 Docker 守护进程。 | 服务文件路径:/usr/lib/systemd/system/docker.service ,定义依赖、环境等配置。 |
这部分内容关于 Ubuntu系统服务管理 的详细分析解读,已经给各位观众老爷细致解读过,请参考 Ubuntu教学系列(六):权限控制与系统管理 。
1.1.2 设置开机自启动
- 设置docker开机自启动
sudo systemctl enable docker
运行此命令后,docker服务将在每次系统重启时自动启动。
- 可再次查看服务状态
sudo systemctl is-enabled docker
如果输出为 enabled,则表示 docker 服务已成功配置为在启动时自动运行。具体如下图所示。
1.2 免 sudo
运行 docker 及验证
1.2.1 添加 docker 用户组( 可选,推荐!)
- 添加docker用户组
# 将用户加入 docker 组
sudo usermod -aG docker $USER
注释: 以下是 sudo usermod -aG docker $USER
命令的解释
部分 | 作用 | 补充说明 |
---|---|---|
sudo | 以管理员权限执行命令 | 修改用户组需要 root 权限 |
usermod | 修改用户账户属性的工具 | 常用于调整用户所属组、家目录等 |
-aG | -a :追加用户到组(不覆盖原有组)-G :指定目标组名 | 若省略 -a ,用户会被移出其他组,仅保留 docker 组 |
docker | 目标用户组名 | 加入此组后,用户可直接运行 Docker 命令,无需 sudo |
$USER | 环境变量,表示当前用户名 | 自动替换为你的登录用户名(如 john ),无需手动修改 |
命令作用
-
核心功能:将当前用户加入
docker
用户组,使其拥有直接操作 Docker 的权限(无需sudo
)。 -
典型场景:解决直接运行
docker ps
时提示Permission denied
的问题。
- 生效方法
修改用户组后,需 重新登录 或 重启系统 使组权限生效。提供两种方法:
-
注销重新登录
无需重启整个系统,仅需:
# 注销当前会话(图形界面或终端)
logout
# 或使用以下命令重新加载组(部分系统有效)
newgrp docker
- 重启系统(推荐)
# 立即重启系统(需 sudo 权限)
sudo reboot
1.2.2 验证是否生效
# 无需 sudo,直接查看容器列表
docker ps
如下图所示,需要说明的是,docker ps
查询的是正在运行的容器列表,我的容器列表是空的,正是因为我目前并没有运行容器。
关于如何使用docker的相关操作,马上更新,会非常详细的讲解每一个操作,给出超级详细的解释,赶快关注uo主吧,分享超级干货!!!
二、Docker 镜像源配置与加速
docker 镜像源是提升容器化工作效率的关键环节,尤其在国内网络环境下,默认镜像源的访问延迟和稳定性问题常成为瓶颈。本章将系统讲解 镜像源的核心作用、配置方法与验证技巧,并针对典型问题提供解决方案。通过配置国内镜像加速器,各位观众老爷可显著缩短镜像拉取时间,避免下载中断,同时掌握 daemon.json 文件调优与服务重启等实操技能,为构建高效、稳定的镜像拉取环境提供可靠保障。
2.1 镜像源的作用与必要性
2.1.1 镜像源是什么?有什么作用
- 镜像源
镜像源是 Docker 镜像的代理仓库,充当用户与 Docker Hub(默认官方源)之间的缓存中介。
- 其核心作用
-
加速镜像拉取:通过地理就近的服务器分发镜像,减少跨国网络延迟。
-
提升可用性:在官方源不可用时,仍可通过镜像源获取缓存内容。
-
企业级管控:支持搭建私有镜像源,统一管理内部镜像依赖(如 Harbor 私有仓库)。
2.1.2 为什么要修改默认镜像源
Docker 默认从境外 Docker Hub 拉取镜像,国内用户直接访问时面临以下问题:
-
速度瓶颈:跨境网络带宽限制,导致下载耗时(如 Ubuntu 基础镜像可能需数十分钟)。
-
匿名限流:Docker Hub 对未登录用户实施严格的请求限流策略,频繁操作易触发拦截。
-
稳定性风险:国际链路波动或防火墙干扰可能导致连接中断。
使用国内镜像源可针对性解决上述痛点,显著优化体验。
2.2 配置镜像源
注释:这个小节涉及关于 文件方面的操作,不熟悉的观众老爷,请参考 Ubuntu系列教学(五):文件与目录的精准操控,有非常详细的解读。系统服务 方面的内容,上面已经给出链接,这里就不再赘述。
2.2.1 准备工作
- 确认 docker 服务已启动(可跳过,已经设置自启动)
# 检查 Docker 服务状态
sudo systemctl status docker# 若未运行,手动启动
sudo systemctl start docker
- 备份 Docker 配置文件(可选,推荐)
docker 的镜像源配置就是修改Ubuntu系统路径 /etc/docker/
下的 daemon.json
文件。
# 备份配置文件
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
2.2.2 修改 daemon.json
配置文件
- 创建或编辑配置文件
# 使用 vim 编辑器
sudo vim /etc/docker/daemon.json # 使用 nano 编辑器
sudo nano /etc/docker/daemon.json
- 添加镜像源地址
{"registry-mirrors": ["地址1","地址3","地址3"]
}
操作示例
{"registry-mirrors": ["https://hub-mirror.c.163.com","https://<your-aliyun-mirror>.mirror.aliyuncs.com","https://mirror.baidubce.com"]
}
注释:上面主要是教各位观众老爷如何更换镜像源,这部分是纯干货也可能是各位观众老爷最关心的地方。
下面的镜像源是我目前正在使用的,并且文章下面也给出了验证,完全可以使用!直接复制粘贴我的镜像就可以!
来源:轩辕镜像 。
{"registry-mirrors": ["https://docker.1ms.run","https://docker.xuanyuan.me","https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}
- 将 1 和 2 操作简化(视个人习惯,我习惯使用 1 和 2 操作)
sudo vim /etc/docker/daemon.json <<EOF
{"registry-mirrors": ["https://docker.1ms.run","https://docker.xuanyuan.me","https://do.nark.eu.org","https://dc.j8.work","https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"]
}
EOF
注释:<<EOF EOF
<<
是 shell 中的一种重定向操作符,用于表示将后面的内容作为前面命令的标准输入。EOF
是一个约定俗成的标记,用于表示后面的内容是重定向的内容,直到遇到另一个EOF
标记时结束。在这里,它的作用是告诉 shell,从<<EOF
开始到下一个EOF
结束的内容,都要作为 vim 编辑器的输入,即要写入到/etc/docker/daemon.json
文件中的内容。
2.2.3 重启 docker 服务使配置生效
sudo systemctl daemon-reload # 重新加载配置
sudo systemctl restart docker # 重启 Docker 服务
2.2.4 验证镜像源配置
# 查看已配置的镜像源
docker info | grep -A 1 "Registry Mirrors"# 测试拉取镜像速度
docker pull ubuntu:latest
这是我使用的镜像源,截至(2025.5.23
)完全可以正常使用,如下图所示。
2.3 常见问题与解决办法
2.3.1 配置文件格式错误
-
安装校验工具:
jq
sudo apt update && sudo apt install jq
-
校验JSON 格式:
sudo jq . /etc/docker/daemon.json
2.3.2 镜像源未生效
-
现象:docker info 未显示镜像源地址。
-
解决:
-
确认配置文件路径为
/etc/docker/daemon.json
。 -
检查 Docker 服务是否成功重启。
-
关键的是,也是最有可能的,镜像源失效!唯一的解决办法是,换源!方法如上,和更换默认源一致。
-
能够看到这里的观众老爷,无疑是对up的最大肯定和支持,在此恳求各位观众老爷能够多多点赞、收藏和关注(强烈推荐大家关注一下up主和新建的这个合集“Ubuntu系统教学系列”)。在这个合集中,未来将持续给大家分享关于Ubuntu系统生态中的多种常见开发实用操作。未来也将继续分享Docker、conda、ROS等等各种实用干货。感谢大家支持!
我也除了更新刚刚新开的“Docker”合集,也会继续更新“Ubuntu系统教学系列”合集,欢迎大家继续关注。各位观众老爷的支持,就是我创作的最大动力!!!
往期回顾 — 往期专栏 和 系列博文
往期专栏: Ubuntu系统教学系列
本期专栏: Docker
Docker系列(一):初识Docker、安装并快速上手实践,逐帧过!!!
相关文章:

Docker系列(二):开机自启动与基础配置、镜像加速器优化与疑难排查指南
引言 docker 的快速部署与高效运行依赖于两大核心环节:基础环境搭建与镜像生态优化。本期博文从零开始,系统讲解 docker 服务的管理配置与镜像加速实践。第一部分聚焦 docker 服务的安装、权限控制与自启动设置,确保环境稳定可用;…...

a16z:AI带来了全新的9种开发软件的模式
非常有启发的9条新兴模式,推荐给已经上手 vibeCoding 的读者们。 开发者正在将 AI 从简单的工具转变为构建软件的新基础。许多核心概念,如版本控制、模板、文档,甚至用户的定义,都在被重新思考。代理(Agent)…...
20.迭代器模式:思考与解读
原文地址:迭代器模式:思考与解读 更多内容请关注:深入思考与解读设计模式 引言 在软件开发中,尤其是在处理集合数据时,你是否曾经遇到过这样的问题:你需要遍历一个集合(如数组、列表、集合等)…...
Java 学习笔记:注解、泛型与 IO 流
目录 课程目标 Java 注解(Annotation) 1. 概念与作用 2. 自定义注解示例 3. JDK 内置注解 4.注释 Java 泛型(Generics) 1. 基本语法 2. 通配符与上下限 3. 常见应用场景 Java IO 流 1. 流的分类1.File文件类 2. 字节流与字符流 3. 经典示例:文件拷贝 总结与…...

在 Excel 使用macro————仙盟创梦IDE
Dim filePath As StringDim fileContent As StringDim lines() As StringDim dataArray() As StringDim lineCount As LongDim maxCols As LongDim i As Long, j As Long 文件路径filePath "" 检查文件是否存在If Dir(filePath) "" ThenMsgBox "文件…...
【MySQL】08.视图
视图就是一个由查询到的内容定义的虚拟表。它和真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。 1. 基本使用 mysql> select * from user; -------------------- | id | age | name …...

鸿蒙devEco studio如何创建模拟器
官网原文链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-emulator-create 操作步骤 点击菜单栏的Tools > Device Manager,点击右下角的Edit设置模拟器实例的存储路径Local Emulator Location,Mac默认存储在~/…...

鸿蒙路由参数传递
页面test.ets 代码如下: import router from ohos.router Entry Component struct Test {State message: string Hello WorldState username: string huState password: string 1build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWe…...

springboot 控制层调用业务逻辑层,注入报错,无法自动装配 解决办法
报错: 解决:愿意是业务逻辑层,即service层的具体实现类没有加注解Service导致的,加上解决了!!...

MySQL:11_事务
事务 一.CURD不加控制,会有什么问题? 二.什么是事务? 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制…...

Linux中的文件系统和软硬连接
磁盘的访问方式 CHS(柱面,磁头,扇区) 法(磁盘硬件查找): 确定柱面(C) 磁头臂移动到对应的柱面位置。例如,柱面号为 5,则磁头移动到第 5 个磁道组…...
并发容器(Collections)
一、并发安全问题根源 1. List(如ArrayList) 问题表现:多线程同时调用add、remove等方法时,可能抛出ConcurrentModificationException或导致数据不一致。根本原因: 非原子性操作:如add操作的流程…...
SPA模式下的es6如何加快宿主页的显示速度
SPA的模式下,宿主页是首先加载的页面,会需要一些主要的组件,如element-plus,easyui,devextreme,ant-design等,这些组件及其依赖组件,文件多,代码量大,可能导致…...
windows powershell 判断 进程号是否存在
在 Windows PowerShell 中,你可以使用多种方法来检查一个特定的进程号(PID)是否存在。以下是几种常用的方法: 方法1:使用 Get-Process 命令 你可以尝试获取具有特定 PID 的进程。如果该进程存在,Get-Proce…...
c# 解码 encodeURIComponent
在C#中,如果你需要解码由encodeURIComponent方法编码的URL,你可以使用System.Web命名空间中的HttpUtility.UrlDecode方法。这个方法可以处理由JavaScript的encodeURIComponent方法编码的字符串。 首先,确保你的项目中引用了System.Web命名空…...

Spring AI:Java开发者的AI开发新利器
目录 一、引言 二、Spring AI 是什么 三、核心功能与特性 3.1 统一的 API 抽象 3.2 丰富的模型支持 3.3 低代码集成 3.4 结构化数据输出 3.5 流式数据响应 四、应用场景 4.1 智能客服系统 4.2 图像识别应用 4.3 数据分析与预测 五、快速上手 5.1 环境搭建 5.2 创…...
Android System UI 深度解析:从架构演进到车载 / TV 场景的全维度定制
Android System UI 是 Android 操作系统的核心组件,负责管理设备的系统级用户界面和交互逻辑。它通过状态栏、导航栏、通知面板、快速设置等功能,为用户提供与系统功能直接交互的入口,并与硬件、应用程序深度协同,构建完整的用户体验。以下是其核心架构、功能演进及定制化能…...

Spring Cloud Sleuth与Zipkin深度整合指南:微服务链路追踪实战
上篇文章简单介绍了SpringCloud系列熔断器:Sentinel的搭建及基本用法,今天继续讲解下SpringCloud的微服务链路追踪:Zipkin的使用!在分享之前继续回顾下本次SpringCloud的专题要讲的内容: 前置知识说明 在开始本教程前…...
React从基础入门到高级实战:React 基础入门 - 列表渲染与条件渲染
列表渲染与条件渲染 在 React 开发中,列表渲染 和 条件渲染 是处理动态数据和用户交互的基础技术。通过列表渲染,你可以根据数据动态生成 UI 元素;而条件渲染则让你根据特定条件展示不同的内容。这两个技能在实际项目中非常常见,…...
在 stm32 中 volatile unsigned signed 分别有什么作用,分别在什么场景下使用?
在STM32开发中, plaintext 复制 volatile 、 plaintext 复制 unsigned 和 plaintext 复制 signed 是三个关键的关键字,它们的用途和场景如下: 1. plaintext 复制 volatile 关键字 作用: 禁止编译器优化ÿ…...
FreeBSD14.2因为爆内存而导致Xfce4视窗被卡,桌面变黑色,只能看到鼠标在窗体中心,鼠标无反应,键盘无反应
拿问题问AI pytest的时候因为内存不足导致xfce4卡住(xfce4相关进程被关闭),桌面变黑色,只能看到鼠标在窗体中心,鼠标无反应,键盘无反应,请问应该怎么办? pytest的时候因为内存不足导…...
k8s-NetworkPolicy
在 Kubernetes 中,NetworkPolicy 是一种资源对象,用于定义 Pod 之间的网络通信策略。它允许你控制哪些 Pod 可以相互通信,以及如何通信。通过使用 NetworkPolicy,可以实现更细粒度的网络访问控制,增强集群的安全性。 1…...

spring-ai 集成 mcp 之投机取巧
主旨 这篇文章主旨就一点,罗列spring-ai对mcp集成导致出现的一系列问题 分析 由于mcp未问世之前,就早就已经有了工具调用,源码如下: public interface ToolCallback {/*** Definition used by the AI model to determine when a…...

大语言模型的完整训练周期从0到1的体系化拆解
以下部分内容参考了AI。 要真正理解大语言模型(LLM)的创生过程,我们需要将其拆解为一个完整的生命周期,每个阶段的关键技术相互关联,共同支撑最终模型的涌现能力。以下是体系化的训练流程框架: 阶段一&am…...

历年北京邮电大学保研上机真题
2025北京邮电大学保研上机真题 2024北京邮电大学保研上机真题 2023北京邮电大学保研上机真题 在线测评链接:https://pgcode.cn/problem?classification1 32位二进制串加法 题目描述 输入一个32位的二进制01串,输出这个数1和3后的32位二进制串。 输入…...
elementUI 中el-date-picker和el-select的样式调整
1. el-date-picker <el-date-picker class"select1" size"small" v-model"timeRangeArr" type"daterange" align"right" unlink-panels range-separator"至" start-placeholder"开始日期" end-pla…...

《仿盒马》app开发技术分享-- 定位获取(端云一体)
开发准备 上一节我们实现了地址管理页面的数据查询和展示,接下来我们要实现的功能是地址添加相关的,我们想实现的功能是地图选点,那么在地图选点之前我们要做的就是先获取用户当前的定位。获取定位后我们拿到经纬度和其他信息,然…...

黑马点评--基于Redis实现共享session登录
集群的session共享问题分析 session共享问题:多台Tomcat无法共享session存储空间,当请求切换到不同Tomcat服务时,原来存储在一台Tomcat服务中的数据,在其他Tomcat中是看不到的,这就导致了导致数据丢失的问题。 虽然系…...

Mujoco 学习系列(二)基础功能与xml使用
这篇文章是 Mujoco 学习系列第二篇,主要介绍一些基础功能与 xmI 使用,重点在于如何编写与读懂 xml 文件。 运行这篇博客前请先确保正确安装 Mujoco 并通过了基本功能与GUI的验证,即至少完整下面这个博客的 第二章节 内容: Mujoc…...

比特授权云外壳加密支持Android 15!
在信息化时代,多数软件供应商需要适配安卓系统,以扩大市场、满足用户需求并提升竞争力。APK作为Android应用的安装包,包含代码、资源、配置文件等运行所需组件,用于在设备端分发和安装应用。企业在分发软件时,需要通过…...