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

news2025/3/25 2:41:22

一、基础方案:使用 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 配置导致的启动失败问题。若仍存在问题,可结合具体日志进一步排查。

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

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

相关文章

磁盘清理工具-TreeSize Free介绍

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

c#知识点补充2

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

力扣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…

MacOS安装 nextcloud 的 Virtual File System

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

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…

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…

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…

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;在对话中使用。以下是…

信奥赛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 通过查询机制有效融合了视觉和语言特征…

SpringBoot项目实战(初级)

目录 一、数据库搭建 二、代码开发 1.pom.xml 2.thymeleaf模块处理的配置类 3.application配置文件 4.配置&#xff08;在启动类中&#xff09; 5.编写数据层 ②编写dao层 ③编写service层 接口 实现类 注意 补充&#xff08;注入的3个注解&#xff09; 1.AutoWir…

计算机网络——总结

01. 网络的发展及体系结构 网络演进历程 从1969年ARPANET的4个节点发展到如今覆盖全球的互联网&#xff0c;网络技术经历了电路交换到分组交换、有线连接到无线覆盖的革命性变革。5G时代的到来使得网络传输速度突破10Gbps&#xff0c;物联网设备数量突破百亿级别。 网络体系…