首先创建容器： 设置端口：（下图的 777 是想要映射成的端口） 设置文件映射： 如果不能在线阅读：
QNAP Docker Ubuntu 上手使用 | 附 Cloudflare DDNS
Preface 之前折腾 Clash 的时候，我拿 py 写的 Cloudflare DDNS 的脚本挂了，于是乎就打算直接挂在 NAS 上。虽然现在折腾完毕，但是这次在 NAS 上搞得过程还是很值得记录的。 Ubuntu Docker 安装完毕之后要做几件事情： 换源，但是此时只能把连接改成 http 协议，因为还没装 ssl 库和 ca 证书 更新源：apt update 安装 ssl 库：apt install openssl 安装 ca 证书：apt-get install ca-certificates -y 讲源改成 https 更新源：apt update 安装环境 python3 pip3 自行搜索，apt 一顿乱装即可 脚本 从我的 https://github.com/JeffersonQin/CloudflareDDNS 当中抽出一段： import json import requests import time import traceback import os while True: try: root_dir = os.path.split(os.path.abspath(__file__))[0] config_dir = os.path.join(root_dir, 'config.json') log_dir = os.path.join(root_dir, 'log.out') with open(config_dir, 'r', encoding='utf8') as f: config = json.load(f) X_AUTH_KEY = config['X_AUTH_KEY'] ZONE_ID = config['ZONE_ID'] EMAIL = config['EMAIL'] DNS_RECORD_NAME = config['DNS_RECORD_NAME'] WEBSITE_URL = config['WEBSITE_URL'] headers = { "X-Auth-Email": EMAIL, "X-Auth-Key": X_AUTH_KEY, "Content-Type": "application/json" } ip = requests.get(url='http://ip.42.pl/raw').text res = requests.get(url="https://api.cloudflare.com/client/v4/zones/" + ZONE_ID + "/dns_records", headers=headers).json() result_arr = res["result"] site_id = "" for result in result_arr: if result["type"] == 'A': if str(result["name"]) == WEBSITE_URL: site_id = result["id"] break response = requests.put(url="https://api.cloudflare.com/client/v4/zones/" + ZONE_ID + "/dns_records/" + str(site_id), headers=headers, data='{"type":"A","name":"' + DNS_RECORD_NAME + '","content":"' + ip + '","ttl":1,"proxied":false}') res = json.loads(response.text) with open(log_dir, 'a', encoding='utf8') as f: f.write(str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) + ": " + ip + "\n") if res["success"]: f.write(str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) + ": success\n") else: f.write(str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) + ": failed\n") f.write("response: \n") f.write(res + "\n") except Exception as e: with open(log_dir, 'a', encoding='utf8') as f: f.write(str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) + ": unexpected error occurred\n") f.write("Exception: " + e + '\n') f.write("Traceback: \n") f.write(traceback.format_exc() + '\n') time.sleep(1800) 额外需要一个配置文件：config.json，需要如下字段： X_AUTH_KEY ZONE_ID DNS_RECORD_NAME WEBSITE_URL 本来是用 nohup 的，然后管道追加到文件，但貌似这样 log 不能正确的输出，就直接用代码实现了。 添加开机启动 首先是 NAS 中这个 Docker 的开机启动： 然后是脚本的开机运行。由于默认的启动命令是 bash: 所以我在 /root/.bashrc 中追加了一句： nohup python3 /path/to/script/ddns.py & 记得修改路径。
家里有囤积照片的需求，于是乎就入了QNAP的NAS，这个型号： 之前刚刚检修过网络（其实并没什么用）, 下图为家中的网络拓扑 光猫 => AX3600 => QNAP + 我的台式 + 其他无线设备 => 电力猫 => 其他无线设备 设置！ 大部分内容请参考：https://post.smzdm.com/p/a3gw7q27/ 关于存储池、卷、共享文件夹、用户组 推荐策略： 首先定好RAID方案 将一组一组的RAID方案建立存储池 每个存储池建立一个储存容量占满的厚卷 在卷中建立若干个共享文件夹 共享文件夹可以设置每个用户的权限 关于DDNS 可以用官方的，可以用自己的，我喜欢用自己的。注意：一个域名可以添加多条记录，可以兼顾内网和外网。之后会专门写一篇文章讨论这个问题。 配置Qbittorrent 使用第三方源 教程 https://sspai.com/post/57481# https://post.smzdm.com/p/a78z5z9o/ 教程不一定要全部遵守，qbit可以按照自己喜欢的方式配置，记得路由器开启uPnP以及开启穿透。 关于QSync 千万不要放很多小文件！千万不要放很多小文件！千万不要放很多小文件！ 千万不要放正在跑的程序！千万不要放正在跑的程序！千万不要放正在跑的程序！ 只能把它当作一个自动同步的仓库！只能把它当作一个自动同步的仓库！只能把它当作一个自动同步的仓库！ Reference https://post.smzdm.com/p/a3gw7q27/ https://post.smzdm.com/p/aek82wvq/