解决Containr Manager注册表无法搜索下载问题

由于群晖的特殊设计,在使用加速源时无法正常使用搜索功能,该教程是通过Web Station的nginx代理功能在使用加速源时适配搜索。

申请DDNS域名以及证书(如果已经有信任的HTTPS证书可以跳过该步骤)

在 控制面板 -> 外部访问 -> DDNS 中创建一个群晖的DDNS解析并额外勾选获取证书。

确认在 控制面板 -> 安全性 -> 证书 中是否有对应的可信任证书。

在Web Station建立托管网页

建立静态网站

在 Web Station -> 网页服务 中新增一个静态网站:

自定义名称和描述,文档根目录点击浏览然后在web共享文件夹中新增一个自定义文件夹并选择即可,后端服务器保持Nginx:

确认创建:

建立网页服务

在 Web Station -> 网页门户 中新增一个网页服务门户:

服务选择之前建立的静态网站,门户类型选择基于端口,输入自定义https端口这边使用的是36443:

调整托管网页证书

在 控制面板 -> 安全性 -> 证书 设置 将对应托管网页端口36443切换为DDNS证书域名。

修改底层配置

参考以下教程,使用SSH登录到NAS并切换到root:
https://kb.synology.cn/zh-cn/DSM/tutorial/How_to_login_to_DSM_with_root_permission_via_SSH_Telnet

修改解析配置

修改 /etc/hosts 将对应https证书域名解析到本机:

echo "127.0.0.1 dptest2.synology.me" >> /etc/hosts

检查配置是否正确:
cat /etc/hosts

检查解析是否正常:

ping -c 5 dptest2.synology.me

修改托管网页配置

查询托管网页的serivce id,这边配置托管网页的端口是36443就使用36443进行搜索:
cat /var/packages/WebStation/etc/Portal.json | grep -A 4 https_port | grep -A 4 36443 | grep '"service"' | awk -F'"' '{print $4}'

这边查询到托管网页的serivce id7b114047-97fc-4282-86ea-95c5b18cbf9c,然后使用该ID创建对应的路径以及配置文件:
创建路径:
mkdir /usr/local/etc/nginx/conf.d/7b114047-97fc-4282-86ea-95c5b18cbf9c

创建配置文件:
vi /usr/local/etc/nginx/conf.d/7b114047-97fc-4282-86ea-95c5b18cbf9c/user.conf

以下为配置文件内容,请按需调整。
其中location /location /v1/search是UI搜索用的镜像站,需要通过以下命令测试对应镜像站是否有镜像搜索页面:
curl "https://docker.1ms.run/v1/search?q=library/&n=50&page=1"

如果有返回类似以下信息则说明可用:

如果返回404、503则说明不可用:

这边用的是docker.1ms.run,如果要使用其他的镜像站则需要将所有proxy_passproxy_ssl_name修改,各有两处:

    location / {
        proxy_pass https://docker.1ms.run;
        proxy_ssl_name docker.1ms.run;
        proxy_ssl_server_name on;
    }

    ##修复搜索

    location /v1/search {

        if ($arg_q ~* ^library/(.*)) {
            set $new_q $1;
            }

        if ($arg_q = library/) {
            set $new_q library/;
            }

        if ($new_q = "") {
            set $new_q $arg_q;
            }

        proxy_pass https://docker.1ms.run/v1/search?q=$new_q&n=$arg_n&page=$arg_page;
        proxy_ssl_name docker.1ms.run;
        proxy_ssl_server_name on;
    }

添加以上内容到托管网站的配置文件内。
可以通过vi并进入粘贴模式:set paste

目前测试以下网址可以正常工作:

docker-0.unsee.tech
docker.hlmirror.com
docker.1ms.run

粘贴完成后检查配置文件内容是否如下:

通过以下命令检查配置是否正常:
nginx -t

使用以下命令让配置生效:
systemctl reload nginx

Containr Manager连接托管网页

在 Containr Manager 注册表 -> 设置 选择新增注册表,添加站点名称以及之前配置的托管网页与端口:
https://dptest2.synology.me:36443

选择使用托管网页注册表查看是否可以正常搜索:

部分镜像源可能没有提供标签功能只能下latest:

查看是否可以正常下载: