docker镜像源、代理配置

要解决 Docker 拉取镜像时出现的 Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded 错误,可通过配置国内镜像源(镜像加速器)来优化网络连接。以下是详细步骤:


方法 1:修改 Docker 配置文件(推荐)

步骤:

  1. 编辑 Docker 配置文件
    创建或修改 /etc/docker/daemon.json(Linux/macOS)或 Docker Desktop 的配置(Windows):

    1
    sudo nano /etc/docker/daemon.json
  2. 添加国内镜像源
    将以下内容粘贴到文件中(根据需求选择一个或多个镜像源):

    1
    2
    3
    4
    5
    6
    7
    8
    {
    "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn", // 中科大源
    "https://hub-mirror.c.163.com", // 网易源
    "https://registry.docker-cn.com", // Docker中国官方源(已停更,部分可用)
    "https://mirror.ccs.tencentyun.com" // 腾讯云源
    ]
    }

    :建议优先使用 中科大网易 源。

  3. 保存并重启 Docker

    1
    2
    sudo systemctl daemon-reload    # 重新加载配置
    sudo systemctl restart docker # 重启 Docker 服务
  4. 验证配置是否生效

    1
    docker info

    在输出中检查 Registry Mirrors,确认已列出配置的镜像源。


方法 2:临时使用镜像源(命令行指定)

拉取镜像时直接指定镜像源:

1
docker pull registry.docker-cn.com/library/ubuntu:latest

注意:此方法需修改镜像 URL,仅对单个命令有效。


各镜像源地址参考

镜像源 地址
中科大 https://docker.mirrors.ustc.edu.cn
网易 https://hub-mirror.c.163.com
腾讯云 https://mirror.ccs.tencentyun.com
阿里云 需登录控制台获取专属地址
Docker 中国 https://registry.docker-cn.com

完成配置后,再次运行 docker pull 命令即可通过国内镜像源加速下载。

方法 3:配置代理

  1. 打开代理配置文件

    1
    sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
  2. 确保格式正确

    1
    2
    3
    4
    [Service]
    Environment="HTTP_PROXY=http://代理服务器IP:端口"
    Environment="HTTPS_PROXY=http://代理服务器IP:端口"
    Environment="NO_PROXY=localhost,127.0.0.1,::1"

    正确示例(根据您的实际代理设置调整):

    1
    2
    3
    4
    [Service]
    Environment="HTTP_PROXY=http://192.168.1.100:8080"
    Environment="HTTPS_PROXY=http://192.168.1.100:8080"
    Environment="NO_PROXY=localhost,127.0.0.1,::1,docker-registry.example.com"

🌐 特别说明:本地代理设置

如果您使用的是本地代理(如 Clash、V2Ray 等),通常应该使用:

1
2
Environment="HTTP_PROXY=http://127.0.0.1:7890"  # Clash 默认端口
Environment="HTTPS_PROXY=http://127.0.0.1:7890"

🔧 验证和修复步骤

  1. 检查当前配置

    1
    sudo systemctl show --property=Environment docker
  2. 修正配置文件后,重新加载并重启 Docker:

    1
    2
    sudo systemctl daemon-reload
    sudo systemctl restart docker
  3. 验证代理设置

    1
    sudo systemctl show --property=Environment docker | grep PROXY
  4. 测试连接

    1
    docker pull hello-world

💡 如果问题仍然存在

如果修正后仍有问题,请尝试:

  1. 检查代理服务器是否正常运行

    1
    curl -x http://代理IP:端口 https://www.google.com --connect-timeout 5
  2. 临时禁用 Docker 代理

    1
    2
    3
    sudo rm /etc/systemd/system/docker.service.d/http-proxy.conf
    sudo systemctl daemon-reload
    sudo systemctl restart docker
  3. 检查 DNS 设置

    1
    2
    cat /etc/resolv.conf
    ping -c 4 8.8.8.8 # 测试基本网络连接

💡 进一步排查建议

如果修正配置后问题依旧,请按以下步骤排查:

  • 测试代理服务器本身是否可用:在终端中运行以下命令,测试您的代理服务器是否能正常访问Docker Hub。请将命令中的地址和端口替换为您的实际代理信息。

    1
    curl -x http://192.168.10.86:10809 https://registry-1.docker.io/v2/
    • 如果返回 200 OK 或类似的成功信息,说明代理服务器工作正常。
    • 如果连接失败或超时,则问题出在代理服务器本身(如未启动、配置错误或网络不通),您需要检查并确保代理服务是正常运行的。
  • 检查代理认证:如果您的代理服务器需要用户名和密码,则配置地址中需要包含认证信息,格式为:http://用户名:密码@192.168.10.86:10809

  • 尝试另一种配置方法:除了修改 http-proxy.conf 文件,您也可以尝试在 /etc/docker/daemon.json 文件中配置代理。请注意,如果 daemon.json 中配置了代理,其优先级可能会高于systemd的配置。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
    "proxies": {
    "default": {
    "httpProxy": "http://192.168.10.86:10809",
    "httpsProxy": "http://192.168.10.86:10809",
    "noProxy": "localhost,127.0.0.1"
    }
    }
    }

    修改后同样需要重启Docker服务。

🔧 删除代理

  1. 移除代理配置
    您可以通过以下任意一种方式移除代理配置:

    • 删除配置文件:直接删除之前创建的代理配置文件。
      1
      sudo rm /etc/systemd/system/docker.service.d/http-proxy.conf
    • 清空配置文件内容:如果该文件中还有其他重要配置,您可以只清空代理设置。使用文本编辑器(如 vinano)打开文件,将 [Service] 部分下的 Environment 行删除或注释掉(在行首添加 # 号)。
    • 临时禁用(推荐用于测试):如果您只是想暂时关闭代理,而不是永久删除配置,可以将配置文件重命名,例如加上 .bak 后缀。这在您未来可能还需要使用代理时会非常方便。
      1
      sudo mv /etc/systemd/system/docker.service.d/http-proxy.conf /etc/systemd/system/docker.service.d/http-proxy.conf.bak
  2. 重新加载配置并重启Docker服务
    这是关键的一步。只要修改了 Docker 守护进程的配置,就必须执行以下命令来重新加载 systemd 配置并完全重启 Docker 服务,更改才能生效。

    1
    2
    sudo systemctl daemon-reload
    sudo systemctl restart docker
  3. 验证代理是否已移除
    配置重启后,您可以验证代理设置是否已清除。执行以下命令检查 Docker 的环境变量:

    1
    sudo systemctl show --property=Environment docker

    如果输出结果中不再显示 HTTP_PROXYHTTPS_PROXY 环境变量,或者其值为空,即表示代理配置已成功移除。

wiki.js搭建

services:
database:
image: amd64/postgres:17 # 使用较新版本的PostgreSQL
environment:
POSTGRES_DB: wiki
POSTGRES_PASSWORD: Rjk@12345 # 请务必修改为强密码
POSTGRES_USER: wikijs
volumes:
- db_data:/var/data/postgresql/data # 数据持久化
restart: unless-stopped
networks:
- wiki-network

wiki:
image: requarks/wiki:canary-2.5.0-dev.411 # 使用”:2”标签获取2.x系列最新版,或使用具体版本号如”2.11.0”
depends_on:
- database
environment:
DB_TYPE: postgres
DB_HOST: database
DB_PORT: 5432
DB_USER: wikijs
DB_PASS: Rjk@12345 # 与上方数据库密码保持一致
DB_NAME: wiki
volumes:
- wiki_data:/wiki/data # 持久化Wiki内容,如图片和日志
- wiki_logs:/wiki/logs
restart: unless-stopped
networks:
- wiki-network
ports:
- “80:3000” # 将主机3000端口映射到容器

volumes:
db_data:
wiki_data:
wiki_logs:

networks:
wiki-network:

Cloudflare搭建Markdown教程

完全理解!在GitHub上创建新博客文章而不是修改原有文件,操作非常简单。以下是详细步骤:

📝 在GitHub上创建新博客文章的步骤

第一步:进入您的博客仓库

  1. 访问:https://github.com/userhanhan/blog-hexo
  2. 确保您已登录GitHub账户

第二步:进入文章目录

  1. 点击进入 source 文件夹
  2. 点击进入 _posts 文件夹

第三步:创建新文章文件

  1. 点击右上角的 “Add file” 按钮
  2. 选择 “Create new file”

第四步:命名新文件

在文件名输入框中,按照Hexo的命名规则:

1
YYYY-MM-DD-文章标题.md

例如:

1
2025-01-20-my-new-blog.md

第五步:编写文章内容

在编辑器中输入以下格式的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
---
title: 我的新博客文章标题
date: 2025-01-20 12:00:00
tags: [标签1, 标签2]
categories: [分类名称]
---

这里是您的博客文章内容,使用Markdown语法编写。

## 二级标题
这是段落内容。

- 列表项1
- 列表项2

```python
# 代码块示例
print("Hello, World!")
```

第六步:提交新文件

  1. 滚动到页面底部
  2. “Commit new file” 部分:
    • 第一行:Add new post: 我的新博客文章标题
    • 可选描述:(可以留空)
  3. 选择 “Commit directly to the main branch”
  4. 点击 “Commit new file”

🔄 完整流程示意图

1
2
3
4
5
6
7
8
flowchart TD
A[访问GitHub仓库] --> B[进入source/_posts目录]
B --> C[点击Add File → Create new file]
C --> D[按规则命名文件]
D --> E[编写文章内容+Front Matter]
E --> F[提交到main分支]
F --> G[Cloudflare自动检测并部署]
G --> H[新文章在线可见]

⚠️ 重要注意事项

文件名规则

  • 必须包含日期YYYY-MM-DD-标题.md
  • 使用连字符 而不是空格
  • 扩展名必须为 .md

Front Matter格式(文件开头的配置)

1
2
3
4
5
6
---
title: 您的文章标题
date: 年-月-日 时:分:秒
tags: [标签1, 标签2, 标签3]
categories: [分类名称]
---

等待自动部署

  • 提交后,Cloudflare通常需要 2-5分钟 检测变更并重新部署
  • 您可以在Cloudflare Pages的部署日志中查看进度
  • 部署完成后,新文章会自动出现在您的博客中

💡 实用技巧

快速复制模板

您可以先打开现有的 hello-world.md 文件,点击”Raw”查看原始内容,然后复制Front Matter结构。

使用描述性文件名

好的文件名示例:

  • 2025-01-20-getting-started-with-hexo.md
  • 2025-01-20-my-first-blog-post.md

测试部署

创建新文章后,您可以:

  1. 访问您的博客首页查看新文章列表
  2. 点击文章标题查看完整内容
  3. 检查格式是否正确显示

现在就去尝试创建您的第一篇新文章吧!如果有任何问题,请随时告诉我。

乐于记录,乐在分享:我的技术博客启程

知识因分享而流动,价值因传播而倍增

大家好,我是这个技术博客的新手站长。今天,我怀着激动的心情写下这篇开篇之作,既是作为这个博客的诞生宣言,也是与各位技术爱好者分享我创建这个空间的初衷与期望。

为什么创建这个博客?

在日复一日与代码打交道的过程中,我逐渐意识到,技术的真正掌握始于对知识的梳理和输出。当我们能清晰地向他人解释一个概念时,我们自己才真正理解了它。

这个博客的创建,主要受到两个核心想法的驱动:

首先,记录是思考的延伸。在学习计算机技术的过程中,我们常常会遇到各种值得记录的瞬间:可能是一个棘手问题的解决方案,可能是一项新技术的探索心得,也可能是对某个经典概念的深度剖析。通过书写,我们不仅巩固了自己的理解,更在整理思路的过程中发现了知识的新联系。

其次,分享是进步的催化剂。技术世界之所以能蓬勃发展,正是源于开放与共享的精神。在这个空间中,我希望能将自己的学习历程、实践经验和心得体会坦诚地呈现出来,既为同行者提供参考,也期待能与大家交流碰撞,共同成长。

这个博客将分享什么?

本博客将主要聚焦于以下内容:

  • 技术深度解析:不只是停留在表面使用,而是深入探究技术背后的设计思想、实现原理和应用场景
  • 实际问题解决:记录在开发实践中遇到的具体问题、分析思路和解决方案,突出思考过程而不仅是结果
  • 学习路径总结:对特定技术领域的学习路线进行梳理,帮助读者构建系统化的知识体系
  • 工具效率提升:分享能提高开发效率的工具、技巧和工作流优化

我会努力遵循“十个百分之十不如一个百分之百”的原则,争取每篇文章都讲得深入、讲得透彻,而不是泛泛而谈。

我的写作原则

为了确保内容质量,我将尽力遵循以下原则:

1. 价值导向,注重实用性
每篇文章都将围绕明确的问题或主题展开,避免空洞的理论堆砌。技术博客的核心价值在于其实用性,我将始终聚焦于内容能否为读者解决实际问题、提供新的思路或节省宝贵时间。

2. 结构清晰,降低阅读成本
良好的结构是对读者时间的尊重。我会采用清晰的大纲引导阅读,合理运用标题、列表和强调,将复杂的概念分解为易于消化的小块。同时,遵循“一图胜千言”的原则,适时使用图表、流程图等可视化方式降低理解门槛。

3. 代码适度,突出关键点
技术文章难免涉及代码,但我会避免大段粘贴无关代码。相反,我会聚焦于核心逻辑,必要时配合伪代码和详细注释,确保代码示例真正服务于内容表达。

4. 坦诚交流,承认知识边界
技术领域浩瀚无垠,没有人能精通所有方向。遇到不确定的内容,我会明确说明;存在多种解决方案时,我会尽量客观比较而非武断结论。这个博客记录的是我的学习历程,而非终极权威的宣告。

期待的交友之道

我坚信,技术博客的魅力不仅在于单向的输出,更在于双向的互动。因此,我衷心期待:

  • 问题指正:如果您发现文章中有任何错误或值得商榷之处,请不吝指正,这将是帮助我提升的宝贵机会
  • 思路拓展:如果您有更好的解决方案或不同的实现思路,欢迎分享出来,让我们共同拓宽技术视野
  • 主题建议:如果您有特别感兴趣的技术话题,也可以告诉我,这将成为后续文章的重要参考

通过这种互动,我希望这个博客能成为一个活跃的技术交流社区,而不仅仅是我个人的独白空间。

写在最后

在信息爆炸的时代,增加一篇技术文章似乎只是往海洋中多倒入一杯水。但我相信,真正有价值的内容永远不会被淹没——它可能会在某个深夜,为一位苦苦调试的程序员点亮思路的火花;可能会在某个午后,为一位初学者解开困扰已久的概念谜团。

乐于记录,是对抗遗忘、深化理解的有力武器;乐在分享,是回馈社区、实现技术人共同成长的美好途径。

这是我技术博客之旅的起点,期待与你同行。

感谢你的阅读,欢迎常来看看!