利用registry镜像搭建私有仓库不在赘述
基于官方镜像只能实现不设置账户 任意可读写
或者必须登录才可以读写 没有只读账户 不好公开给他人使用

如果用harbor做 harbor启用了太多容器 其实比较重了,大部分功能个人用户也用不到 而且官方只提供了安装脚本的部署方案
实际上不太友好,本身安装脚本使安装过程不透明 启动容器又多 不像gitlab镜像 虽然本身需要很多服务 但是都封装在一个镜像内,对用户而言,部署和迁移都是一键比较容易的事

所以这边公开一个自用的方案

client_body_buffer_size 5120m;
client_max_body_size 5120m;
underscores_in_headers on;
auth_basic "登录验证";
auth_basic_user_file /www/wwwroot/docker.nikm.cn/auth;
if ($http_authorization !~ "Basic xxxx"){
    set $iftmp Y;
}
if ($request_method !~ GET) {
    set $iftmp "${iftmp}Y";
}
if ($iftmp = YY){
  return 401;
}
location /v2 {
    proxy_pass http://10.10.10.103:5500;
    proxy_http_version 1.1;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Cookie $http_cookie;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

利用nginx的401 生成两个用户auth文件过程自行百度
然后获取你想要可读写的用户 登录以后的浏览器Basic xxx 写到nginx配置文件里
判断 如果登录用户不是自己想要的用户 并且请求了非GET请求 那么就返回一个401 阻止掉对私有镜像仓库的写操作
如果是其他用户 那么正常登录 并且访问GET请求 就正常往下执行反代registry容器的操作

并且该方案在docker_ui docker_cli 只读和可读写账户都测试通过

最后修改:2022 年 05 月 03 日 10 : 54 PM
如果觉得我的文章对你有用,请随意赞赏