当前位置: 首页 > article >正文

【容器运维】docker搭建私有仓库

一、基础方案:使用 Docker Registry 快速搭建

1. 拉取并启动 Registry 镜像
# 拉取官方镜像
docker pull registry:2# 运行容器(数据持久化到宿主机目录)
docker run -d -p 5000:5000 \--name my-registry \-v /opt/data/registry:/var/lib/registry \registry:2
  • 关键参数-v 挂载数据目录防止镜像丢失,-p 映射端口(默认 5000)224960。
2. 配置 Docker 客户端

编辑 /etc/docker/daemon.json,添加私有仓库地址(需重启 Docker):

{"insecure-registries": ["http://<私有仓库IP>:5000"]
}
  • 说明:非 HTTPS 仓库需添加 insecure-registries 配置以绕过安全验证222460。
3. 推送/拉取镜像
# 标记镜像
docker tag nginx:latest <私有仓库IP>:5000/my-nginx:latest# 推送镜像
docker push <私有仓库IP>:5000/my-nginx:latest# 拉取镜像
docker pull <私有仓库IP>:5000/my-nginx:latest
4. 验证仓库内容
# 查看仓库镜像列表
curl http://<私有仓库IP>:5000/v2/_catalog

二、进阶方案:部署 Harbor 企业级仓库

1. 环境准备
  • 安装依赖:Docker 和 Docker Compose(需单独安装)156。
  • 下载 Harbor
    wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
    tar -zxvf harbor-offline-installer-v2.10.0.tgz
    
2. 配置 Harbor
cd harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml  # 修改以下核心参数
hostname: 192.168.x.x       # 服务器IP或域名
http:port: 8080                # 访问端口
harbor_admin_password: YourPassword  # 管理员密码
data_volume: /data          # 数据存储路径
3. 安装与启动
./prepare   # 生成配置文件
./install.sh  # 启动服务
  • 访问管理界面http://<IP>:8080,默认账号 admin14856。
4. 镜像管理
# 登录 Harbor
docker login <HarborIP> -u admin -p YourPassword# 推送镜像(需包含项目名)
docker tag nginx:latest <HarborIP>/my-project/nginx:latest
docker push <HarborIP>/my-project/nginx:latest

三、高级配置(可选)

  1. HTTPS 加密

    • Harbor:在 harbor.yml 中配置 SSL 证书路径4853。
    • Docker Registry:通过 Nginx 反向代理实现 HTTPS,并配置 Let’s Encrypt 证书53。
  2. 身份认证

    • Harbor:自带 RBAC 权限管理148。
    • Registry:通过 Nginx 配置 HTTP 基础认证或集成 OAuth53。
  3. 可视化管理

    • Registry:部署 docker-registry-frontend 提供 Web 界面24。
    • Harbor:原生支持 Web 界面,提供漏洞扫描、复制策略等功能148。

四、方案对比

特性Docker RegistryHarbor
部署复杂度简单(单容器)中等(需配置组件)
功能基础镜像存储企业级权限、漏洞扫描等
适用场景个人/小型团队企业生产环境
维护成本中高(需定期更新)

常见问题

  1. 推送镜像失败

    • 检查 insecure-registries 配置,确保客户端信任私有仓库2224。
    • 确认防火墙是否开放仓库端口(如 5000/8080)。
  2. Harbor 启动报错

    • 确保已安装 Docker Compose,且版本兼容156。
    • 检查 harbor.yml 格式(YAML 缩进敏感)56。

如需更详细操作(如 HTTPS 证书申请、集群部署),可参考 Harbor 官方文档 或 Docker Registry 配置指南。

二、允许http通过docker login登录

要让 Docker 客户端通过 HTTP 协议连接私有仓库(而非默认的 HTTPS),需要修改 Docker 的配置以明确允许不安全连接。以下是具体步骤及原理说明:


一、核心配置方法

1. 修改 Docker 守护进程配置

在 Docker 的配置文件 /etc/docker/daemon.json 中添加 insecure-registries 字段,指定允许通过 HTTP 连接的仓库地址(IP 或域名 + 端口):

{"insecure-registries": ["your.registry.com:5000", "192.168.1.100:80"]
}
  • 作用:禁用 HTTPS 强制验证,允许 Docker 客户端通过 HTTP 通信 1225。
  • 注意事项
    • 若文件不存在则需创建。
    • 多个仓库地址用逗号分隔。
2. 修改 Docker 服务启动参数(替代方案)

若无法通过 daemon.json 生效(如旧版本 Docker),可编辑服务文件 /etc/systemd/system/docker.service,在 ExecStart 行添加 --insecure-registry 参数:

ExecStart=/usr/bin/dockerd --insecure-registry=your.registry.com:5000
  • 生效步骤
    systemctl daemon-reload
    systemctl restart docker
    

115


二、常见错误及处理

1. 错误:http: server gave HTTP response to HTTPS client
  • 原因:Docker 客户端尝试使用 HTTPS 协议,但服务端仅支持 HTTP。
  • 解决:确认 insecure-registries 配置正确,并重启 Docker 服务 22534。
2. 错误:dial tcp IP:80: connect: connection refused
  • 原因:Docker 服务未正确重启或网络配置问题。
  • 解决
    • 检查防火墙是否开放对应端口。
    • 确保仓库服务(如 Harbor)已启动并监听 HTTP 端口 115。

三、域名与 Hosts 配置

若使用域名而非 IP,需确保域名解析正确:

  1. 编辑 /etc/hosts,添加:
    192.168.1.100 your.registry.com
    
  2. 重启网络服务或 Docker 134。

四、登录命令示例

docker login your.registry.com:5000 -u username -p password
  • 成功标志:输出 Login Succeeded
  • 警告处理:若提示密码未加密存储,可通过配置 Docker 凭证助手解决 206465。

五、安全性权衡

  • 风险:HTTP 协议传输数据未加密,可能被中间人攻击。
  • 建议
    • 仅在内部测试环境使用 HTTP。
    • 生产环境应配置 HTTPS 证书 5166。

通过以上配置,Docker 客户端将允许通过 HTTP 协议与指定仓库通信。若问题仍存在,可检查仓库服务日志(如 Harbor 的 core.log)排查服务端问题。

三、获取docker.service地址

根据 Docker 的安装方式及系统环境,docker.service 文件的位置可能存在差异。以下是常见位置的整理及优先级说明:

1. 默认安装位置

在大多数 Linux 系统(如 CentOS、Ubuntu)中,Docker 通过 systemd 管理服务,其默认服务文件路径为:

/lib/systemd/system/docker.service

这是 Docker 官方包安装后生成的标准位置 1347。


2. 用户自定义或覆盖位置

若用户手动修改过 Docker 服务配置(如调整启动参数),可能会在以下路径生成覆盖文件:

/etc/systemd/system/docker.service
  • 优先级:此路径下的文件会覆盖默认文件,systemd 优先读取此处的配置 2860。

3. 其他可能路径

  • 旧版本或源码安装:部分非标准安装可能将服务文件放在 /usr/lib/systemd/system/docker.service 47。
  • Drop-in 片段文件:若存在分片配置,可能位于 /etc/systemd/system/docker.service.d/ 目录下(如 override.conf 等)2728。

验证实际使用的文件

可通过以下命令查看当前生效的 docker.service 路径:

systemctl status docker | grep "Loaded"

输出示例:

Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)

此处显示的路径即为实际加载的文件 2833。


注意事项

  1. 修改配置:直接编辑默认文件可能被包管理器覆盖,建议通过 systemctl edit docker 创建覆盖片段 2760。
  2. 服务重启:修改后需执行 systemctl daemon-reload && systemctl restart docker 使配置生效 147。

如需进一步分析 Docker 服务配置问题,可提供 systemctl status docker 的输出内容。

四、加了参数后docker启动失败

根据搜索结果,在 Docker 服务配置中添加 --insecure-registry 参数后启动失败,通常由配置冲突或语法错误导致。以下是具体原因及解决方案:


一、核心原因分析

1. 配置重复冲突

若同时通过 /etc/docker/daemon.jsondocker.service 文件设置 insecure-registries,Docker 会因参数重复而启动失败。

  • 表现:报错 unable to configure the Docker daemon with file...,提示 insecure-registries 参数在配置文件和命令行中重复设置13。
  • 示例
    // daemon.json 中存在:
    { "insecure-registries": ["your.registry.com:5000"] }// docker.service 中同时存在:
    ExecStart=/usr/bin/dockerd --insecure-registry=your.registry.com:5000
    
2. 语法格式错误

docker.service 文件中修改 ExecStart 行时,若未正确保留原有参数(如 -H fd://),会导致服务启动失败1。

  • 错误示例
    ExecStart=/usr/bin/dockerd --insecure-registry=your.registry.com:5000  # 缺少默认参数
    
3. 域名解析问题

若使用域名而非 IP,需确保已配置正确的 DNS 解析或 /etc/hosts 文件14。

  • 验证方法
    ping your.registry.com  # 检查是否能解析到正确 IP
    

二、解决方案

1. 统一配置方式

方式一:仅使用 daemon.json
① 删除 docker.service 中的 --insecure-registry 参数,恢复默认配置。
② 在 /etc/docker/daemon.json 中写入:

{ "insecure-registries": ["your.registry.com:5000"] }

③ 重启服务:

systemctl daemon-reload && systemctl restart docker

方式二:仅使用 docker.service
① 在 docker.serviceExecStart 行添加参数,并保留原有参数:

ExecStart=/usr/bin/dockerd --insecure-registry=your.registry.com:5000 -H fd:// --containerd=/run/containerd/containerd.sock

② 删除 daemon.json 中的相关配置。
③ 重启服务:

systemctl daemon-reload && systemctl restart docker
2. 检查语法与参数
  • 保留必要参数:确保 ExecStart 行包含 Docker 默认参数(如 -H fd://)1。
  • 使用覆盖文件(推荐):通过 systemctl edit docker 创建片段文件,避免直接修改主配置文件66:
    # 输入以下内容保存
    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd --insecure-registry=your.registry.com:5000 -H fd://
    
3. 查看日志定位问题

通过以下命令获取详细错误信息:

journalctl -u docker --no-pager -n 100  # 查看最近 100 行日志
  • 常见日志线索
    • http: server gave HTTP response to HTTPS client:需确认 insecure-registries 已生效51。
    • dial tcp IP:port: connect: connection refused:检查防火墙或仓库服务是否运行14。

三、验证配置生效

执行以下命令确认参数已加载:

docker info | grep "Insecure Registries"

输出应显示:

Insecure Registries:your.registry.com:5000

四、其他注意事项

  1. 域名与 Hosts 配置:若使用域名,需在 /etc/hosts 中添加解析:
    echo "192.168.1.100 your.registry.com" >> /etc/hosts
    
  2. 安全风险:HTTP 协议存在数据泄露风险,建议生产环境配置 HTTPS14。

通过以上步骤可解决因 --insecure-registry 配置导致的启动失败问题。若仍存在问题,可结合具体日志进一步排查。

相关文章:

【容器运维】docker搭建私有仓库

一、基础方案&#xff1a;使用 Docker Registry 快速搭建 1. 拉取并启动 Registry 镜像 # 拉取官方镜像 docker pull registry:2# 运行容器&#xff08;数据持久化到宿主机目录&#xff09; docker run -d -p 5000:5000 \--name my-registry \-v /opt/data/registry:/var/lib…...

深入理解 Spring 框架中的 AOP 技术

一、引言 在 Java 开发领域&#xff0c;Spring 框架凭借其强大的功能和丰富的特性&#xff0c;成为了众多开发者构建企业级应用的首选。其中&#xff0c;面向切面编程&#xff08;AOP&#xff09;作为 Spring 框架的核心技术之一&#xff0c;为开发者提供了一种全新的程序结构…...

磁盘清理工具-TreeSize Free介绍

TreeSizeFree是一个磁盘空间管理工具&#xff0c;主要用于分析磁盘使用情况&#xff0c;帮助用户找到占用空间大的文件和文件夹: 特点&#xff1a;按大小排序&#xff1a;快速找到占用空间最大的文件或文件夹 一般可以删除: 扫描 C:\Users\XXX\AppData\Local\Temp 或 C:\Window…...

redis MISCONF Redis is configured to save RDB snapshots报错解决

直接上解决方案 修改redis配置文件 stop-writes-on-bgsave-error no 重启redis...

c#知识点补充2

1.非静态类能否调用静态方法可以 2.对string类型扩展方法&#xff0c;如何进行 类用静态类&#xff0c;参数是this 调用如下 3.out的用法 一定要给a赋值 这种写法不行 这样才行 4.匿名类 5.委托的使用 无论是匿名委托&#xff0c;还是具命委托&#xff0c;委托实例化后一定要…...

循环神经网络(Recurrent Neural Network, RNN)与 Transformer

循环神经网络&#xff08;RNN&#xff09;与 Transformer 1. 循环神经网络&#xff08;RNN&#xff09;简介 1.1 RNN 结构 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种适用于处理序列数据的神经网络。其核心特点是通过隐藏状态&#xff08;Hi…...

力扣45.跳跃游戏

45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; #include<vector> class Solution {public:int jump(vector<int>& nums) {int ans[10005] ;memset(ans,1e4,sizeof(ans));ans[0]0;for(int i0;i<nums.size();i){for(int j1;j…...

招聘面试季--方法论--如何从零到-规划一个新的app产品

规划一个新APP产品的系统化步骤及关键要点&#xff1a; 一、需求验证阶段 ‌明确目标用户与核心需求‌ 通过用户调研&#xff08;问卷、访谈&#xff09;定义目标人群的痛点和场景&#xff0c;例如购物类APP需优先满足浏览、支付等核心需求‌。判断APP的必要性&#xff1a;若功…...

MacOS安装 nextcloud 的 Virtual File System

需求 在Mac上安装next cloud实现类似 OneDrive 那样&#xff0c;文件直接保存在服务器&#xff0c;需要再下载到本地。 方法 在 官网下载Download for desktop&#xff0c;注意要下对版本&#xff0c;千万别下 Mac OS默认的那个。 安装了登录在配置过程中千万不要设置任何同…...

OpenCV Imgproc 模块使用指南(Python 版)

一、模块概述 imgproc 模块是 OpenCV 的图像处理核心&#xff0c;提供从基础滤波到高级特征提取的全流程功能。核心功能包括&#xff1a; 图像滤波&#xff1a;降噪、平滑、锐化几何变换&#xff1a;缩放、旋转、透视校正颜色空间转换&#xff1a;BGR↔灰度 / HSV/Lab 等阈值…...

C/C++蓝桥杯算法真题打卡(Day6)

一、P8615 [蓝桥杯 2014 国 C] 拼接平方数 - 洛谷 方法一&#xff1a;算法代码&#xff08;字符串分割法&#xff09; #include<bits/stdc.h> // 包含标准库中的所有头文件&#xff0c;方便编程 using namespace std; // 使用标准命名空间&#xff0c;避免每次调用…...

ORACLE RAC ASM双存储架构下存储部分LUN异常的处理

早上接到用户电话&#xff0c;出现有表空间不足的告警&#xff0c;事实上此环境经常巡检并且有告警系统&#xff0c;一开始就带着有所疑惑的心理&#xff0c;结果同事在扩大表空间时&#xff0c;遇到报错 ORA-15401/ORA-17505,提示ASM空间满了&#xff1a; ALERT日志&#xff1…...

【设计模式】SOLID 设计原则概述

SOLID 是面向对象设计中的五大原则&#xff0c;不管什么面向对象的语言&#xff0c; 这个准则都很重要&#xff0c;如果你没听说过&#xff0c;赶紧先学一下。它可以提高代码的可维护性、可扩展性和可读性&#xff0c;使代码更加健壮、易于测试和扩展。SOLID 代表以下五个设计原…...

从边缘到核心:群联云防护如何重新定义安全加速边界?

一、安全能力的全方位碾压 1. 协议层深度防护 四层防御&#xff1a; 动态过滤畸形TCP/UDP包&#xff08;如SYN Flood&#xff09;&#xff0c;传统CDN仅限速率控制。技术示例&#xff1a;基于AI的协议指纹分析&#xff0c;拦截异常连接模式。 七层防御&#xff1a; 精准识别业…...

others-rustdesk远程

title: others-rustdesk远程 categories: Others tags: [others, 远程] date: 2025-03-19 10:19:34 comments: false mathjax: true toc: true others-rustdesk远程, 替代 todesk 的解决方案 前篇 官方 服务器 - https://rustdesk.com/docs/zh-cn/self-host/rustdesk-server-o…...

记录 macOS 上使用 Homebrew 安装的软件

Homebrew 是 macOS 上最受欢迎的软件包管理器之一&#xff0c;能够轻松安装各种命令行工具和 GUI 应用。本文记录了我通过 Homebrew 安装的各种软件&#xff0c;并对它们的用途和基本使用方法进行介绍。 &#x1f37a; Homebrew 介绍 Homebrew 是一个开源的包管理器&#xff…...

springmvc中使用interceptor拦截

HandlerInterceptor 是Spring MVC中用于在请求处理之前、之后以及完成之后执行逻辑的接口。它与Servlet的Filter类似&#xff0c;但更加灵活&#xff0c;因为它可以访问Spring的上下文和模型数据。HandlerInterceptor 常用于日志记录、权限验证、性能监控等场景。 ### **1. 创…...

C++基础 [八] - list的使用与模拟实现

目录 list的介绍 List的迭代器失效问题 List中sort的效率测试 list 容器的模拟实现思想 模块分析 作用分析 list_node类设计 list 的迭代器类设计 迭代器类--存在的意义 迭代器类--模拟实现 模板参数 和 成员变量 构造函数 * 运算符的重载 运算符的重载 -- 运…...

使用excel.EasyExcel实现导出有自定义样式模板的excel数据文件,粘贴即用!!!

客户要求导出的excel文件是有好看格式的&#xff0c;当然本文举例模板文件比较简单&#xff0c;内容丰富的模板可以自行设置&#xff0c;话不多说&#xff0c;第一步设置一个"好看"的excel文件模板 上面要注意的地方是{.变量名} &#xff0c;这里的变量名对应的就是…...

Spring Boot 集成 Elasticsearch怎样在不启动es的情况下正常启动服务

解释 在spingboot 集成es客户端后&#xff0c;每当服务启动时&#xff0c;服务默认都会查看es中是否已经创建了对应的索引&#xff0c;如果没有索引则创建。基于上面的规则我们可以通过配置不自动创建索引来达到在没有es服务的情况下正常启动服务。 解决办法 在entity类的Docu…...

Java面试黄金宝典8

1. 什么是 Spring MVC 定义 Spring MVC 是 Spring 框架里用于构建 Web 应用程序的模块&#xff0c;它严格遵循 MVC&#xff08;Model - View - Controller&#xff09;设计模式。这种设计模式把应用程序清晰地划分成三个主要部分&#xff1a; Model&#xff08;模型&#xff0…...

JVM常见概念之条件移动

问题 当我们有分支频率数据时&#xff0c;有什么有趣的技巧可以做吗&#xff1f;什么是条件移动&#xff1f; 基础知识 如果您需要在来自一个分支的两个结果之间进行选择&#xff0c;那么您可以在 ISA 级别做两件不同的事情。 首先&#xff0c;你可以创建一个分支&#xff…...

Android AI ChatBot-v1.6.3-28-开心版[免登录使用GPT-4o和DeepSeek]

Android AI ChatBot- 链接&#xff1a;https://pan.xunlei.com/s/VOLi1Ua071S6QZBGixcVL5eeA1?pwdp3tt# 免登录使用GPT-4o和DeepSeek...

集成学习(上):Bagging集成方法

一、什么是集成学习&#xff1f; 在机器学习的世界里&#xff0c;没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象"&#xff0c;单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来&#xff0c;就能像拼图一样还原出完整的真相&a…...

DeepSeek R1 本地部署指南 (3) - 更换本地部署模型 Windows/macOS 通用

0.准备 完成 Windows 或 macOS 安装&#xff1a; DeepSeek R1 本地部署指南 (1) - Windows 本地部署-CSDN博客 DeepSeek R1 本地部署指南 (2) - macOS 本地部署-CSDN博客 以下内容 Windows 和 macOS 命令执行相同&#xff1a; Windows 管理员启动&#xff1a;命令提示符 CMD ma…...

【TI MSPM0】Timer学习

一、计数器 加法计数器&#xff1a;每进入一个脉冲&#xff0c;就加一减法计算器&#xff1a;每进入一个脉冲&#xff0c;就减一 当计数器减到0&#xff0c;触发中断 1.最短计时时间 当时钟周期为1khz时&#xff0c;最短计时时间为1ms&#xff0c;最长计时时间为65535ms 当时…...

Windows部署deepseek R1训练数据后通过AnythingLLM当服务器创建问答页面

如果要了解Windows部署Ollama 、deepseek R1请看我上一篇内容。 这是接上一篇的。 AnythingLLM是一个开源的全栈AI客户端&#xff0c;支持本地部署和API集成。它可以将任何文档或内容转化为上下文&#xff0c;供各种语言模型&#xff08;LLM&#xff09;在对话中使用。以下是…...

重删算法中的Bloom滤波器详解与C++实现

一、Bloom滤波器基础概念 Bloom滤波器&#xff08;Bloom Filter&#xff09;是一种空间高效的概率型数据结构&#xff0c;用于快速判断某个元素是否存在于集合中。其核心特性&#xff1a; 存在不确定性&#xff1a;可能出现假阳性&#xff08;False Positive&#xff09;&…...

信奥赛CSP-J复赛集训(模拟算法专题)(27):P5016 [NOIP 2018 普及组] 龙虎斗

信奥赛CSP-J复赛集训(模拟算法专题)(27):P5016 [NOIP 2018 普及组] 龙虎斗 题目背景 NOIP2018 普及组 T2 题目描述 轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 n n n 个兵营(自左至右编号 1 ∼ n 1 \sim n 1∼n),相邻编号的兵营之间…...

多模态大模型常见问题

1.视觉编码器和 LLM 连接时&#xff0c;使用 BLIP2中 Q-Former那种复杂的 Adaptor 好还是 LLaVA中简单的 MLP 好&#xff0c;说说各自的优缺点&#xff1f; Q-Former&#xff08;BLIP2&#xff09;&#xff1a; 优点&#xff1a;Q-Former 通过查询机制有效融合了视觉和语言特征…...