
最近一直有人在问,docker 查询注册表失败的问题,目前老苏验证可用的方法有 2 个:
- 方法一(可用):
- 看过老苏以前文章的读者都知道,在遇到发布到
ghcr.io的镜像时,老苏都会推荐用dockerproxy,其实发布到hub.docker.com的镜像也是一样可用的

- 打开 https://dockerproxy.com,在第一步中输入镜像的
用户名/镜像名称:tag,点获取命令

- 用
ssh客户端登录到群晖,在命令行依次执行第二步~第四步的命令,权限不够的话,加sudo再执行
此方法虽然麻烦,但适合没有条件科学上网的人,如果你觉得好用的话,记得去给网站捐助一下,不过这个方法并不能解决注册表搜索的问题
更多的玩法请看官方文档:https://dockerproxy.com/docs
- 方法二(不可用)
从文档看,似乎有更简单的方式,但老苏没成功,大家可以试试看
注册表 --> 设置,选中 https://rigistry.hub.docker.com,点 编辑

勾选 启用注册表镜像,在 注册表镜像 URL 中填入 https://dockerproxy.com

但老苏试了还是不行,当然你也可以找找其他的镜像 URL 试试,其中阿里和华为需要注册自己的账号

- 方法三(可用):
就用科学上网了,把 docker.com 加入到域名黑名单,一劳永逸
本文完成于
2月上旬;
什么是 Shlink ?
Shlink是一个自托管的开源URL缩短器,它提供了一个REST和一个CLI接口来与之交互。此外,还有一个官方的Shlink web客户端,通过使用Shlink的REST API,提供了一个漂亮的web UI来处理多个Shlink实例。
前期准备
获取 API key
Shlink 使用 MaxMind 的 GeoLite2 数据库来定位对您的短 URL 的访问。
Shlink 需要一个 GeoLite2 许可证密钥,用来定期下载新版本的数据库,确保数据始终是最新的。
这些许可证是免费的,只需要在 https://www.maxmind.com/en/geolite2/signup 注册用户,然后生成一个 license key 就可以
保存这个
License Key值很重要,因为也是只显示一次的

建数据库
老苏用了群晖自带的 MariaDB 10 数据库。

在 phpMyAdmin 中创建名为 shlink 的空数据库。
为便于说明,假设数据库密码为
123456

反向代理
短链接应该是放在公网用的,用局域网 IP 方式显然是不合理的
| 域名 | 局域网地址 | 说明 |
|---|---|---|
st.laosu.ml | 192.168.0.197:8019 | 服务端 |
stc.laosu.ml | 192.168.0.197:8020 | 客户端 |
老苏的域名没有备案,在实际访问时是要带端口的,例如服务端是
https://st.laosu.ml:444
虽然老苏已经尽量缩短 url,但是实际上还是有点长,毕竟是二级域名,有条件的话,最好用短的一级域名 😂

SSL 还是没问题就全选

客户端也是一样的

环境变量
老苏用到了下面👇这些环境变量
| 可变 | 值 |
|---|---|
DEFAULT_DOMAIN | 用于此 Shlink 实例的自定义域名 |
IS_HTTPS_ENABLED | 是否启用 https 协议 |
GEOLITE_LICENSE_KEY | 您的 GeoLite2 许可证密钥 |
DB_DRIVER | 使用值 mysql 、 maria 、 postgres 或 mssql来防止使用 SQLite 数据库 |
DB_USER | 数据库服务器的用户名 |
DB_PASSWORD | 数据库服务器的口令 |
DB_HOST | 运行数据库引擎的服务器的主机名 |
DB_PORT | 运行数据库服务的端口 |
DB_NAME | 要使用的数据库名称 |
更多的环境变量请看官方文档:https://shlink.io/documentation/environment-variables/
命令行安装
如果你熟悉命令行,可能用 docker cli 更快捷
老苏安装的
stable版对应的版本是3.5.1
# 新建文件夹 shlink 和 子目录
mkdir -p /volume2/docker/shlink/data
# 进入 shlink 目录
cd /volume2/docker/shlink
# 运行服务端容器
docker run -d \
--restart unless-stopped \
--name shlink-server \
-p 8019:8080 \
-e DEFAULT_DOMAIN=st.laosu.ml:444 \
-e IS_HTTPS_ENABLED=true \
-e GEOLITE_LICENSE_KEY=<你的 GeoLite2 许可证密钥> \
-e DB_DRIVER=mysql \
-e DB_HOST=192.168.0.197 \
-e DB_PORT=3307 \
-e DB_USER=shlink \
-e DB_PASSWORD=123456 \
-e DB_NAME=shlink \
shlinkio/shlink:stable
# 运行客户端容器
docker run -d \
--restart unless-stopped \
--name shlink-web-client \
-p 8020:80 \
shlinkio/shlink-web-client
也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件
version: '3'
services:
server:
image: shlinkio/shlink:stable
container_name: shlink-server
restart: unless-stopped
ports:
- 8019:8080
volumes:
- ./data:/data
environment:
- DEFAULT_DOMAIN=st.laosu.ml:444
- IS_HTTPS_ENABLED=true
- GEOLITE_LICENSE_KEY=<你的 GeoLite2 许可证密钥>
- DB_DRIVER=mysql
- DB_HOST=192.168.0.197
- DB_PORT=3307
- DB_USER=shlink
- DB_PASSWORD=123456
- DB_NAME=shlink
client:
image: shlinkio/shlink-web-client
container_name: shlink-web-client
restart: unless-stopped
ports:
- 8020:80
然后执行下面的命令
# 新建文件夹 shlink 和 子目录
mkdir -p /volume2/docker/shlink/data
# 进入 shlink 目录
cd /volume2/docker/shlink
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d
运行
一开始会下载 GeoLite2 数据库

在浏览器中输入 http://群晖IP:8019 访问服务端,但实际上只能看到 404 错误

接下来要使用以下命令生成新的 API 密钥
docker exec -it shlink-server shlink api-key:generate

也可以从 终端机 进入

输入 shlink api-key:generate
每次执行都会生成不同的
API key,所以截图中的API key都是不一样的

在浏览器中输入 http://群晖IP:8020 就能看到客户端的主界面

点 + Add a server,因为前、后端在同一个局域网,所以写 IP 就可以了

添加成功后的主界面

创建一个短链接

生成的短链接类似于 --> https://st.laosu.ml:444/ivyCe

参考文档
shlinkio/shlink: The definitive self-hosted URL shortener
地址:https://github.com/shlinkio/shlink
Shlink — The URL shortener — Documentation
地址:https://shlink.io/documentation/



















