用了快两年了,才发现原来威联通上是可以用 docker-compose 的,然后 docker-compose 真香。
Docker/Container Station 早就用上了。魔法上网、去广告、下载,大致也就这么多吧。用着是蛮爽的,但是对于版本控来说,每次升级镜像文件,都需要把 docker 销毁、重新拉镜像、重建实例,需要重新将很多参数(例如 volumes)复制来粘贴去的,比较麻烦。
前些时候发现威联通的 Container Station 其实是可以自己写 docker-compose 文件的。今晚刚好有点时间折腾下。
目标是这样的:
- 对于魔法上网和常用软件部分,能手动分配固定 IP
- 能用 portainer 来进行管理
Portainer
本来想直接用界面起一个 portainer 的,但发现它要挂载 /var/run/docker.sock
,就只好用 docker-compose 来写了:
version: "3"
services:
portainer:
container_name: portainer
image: portainer/portainer-ce
restart: always
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /share/Container/Portainer:/data
映射出来个 9000 端口用于 Web 管理,应该就 OK 了。
给 Docker 分配固定 IP
用 Container Station 的时候,里面有个功能比较喜欢:在「网络」部分,可以指定使用 bridge,可以给这个 docker 分配个固定 IP,这样可以把相同类别的 Docker 放在一块儿。但是在平常写 docker-compose 的时候,并没有这么干过。于是,干出事儿了……
照着 docker-compose 的文档,撸出来的 YAML 文件,提交上去,NAS 挂了……完全无响应……只好重置。重置好了之后,继续试验,又挂……总之,挂了四五遍之后,终于摸索出来了。
基本概念之类的东西,见 docker-compose 的文档。蛮……不清晰的……😂不想看文档的话,去 portainer 里面自己创建个网络,看看选项都有哪些。
首先,我们需要在 Container Station 里面随便创建一个 Container,网络类型选「Bridge」(因为只有这个可以使用自定义 IP),下方选「Static IP」,然后填写 IP,确定,创建 Docker

然后来到 Portainer,找到 Networks,会发现有个「qnet-static-eth0-xxxxxx」,记下这个名字。这个是 QNAP 替我们创建好的网络,后面其他 Container 可以直接加入它。有兴趣的话可以看看里面的设置:它的 Driver 是很特别的 qne
t,而不是在 Docker-compose 里面列出的那些。并且似乎我们没办法自己创建出来一个相同的网络。
version: "3"
services:
adguard:
container_name: Adguard
image: adguard/adguardhome
volumes:
- /share/Container/Adguard/conf:/opt/adguardhome/conf
- /share/Container/Adguard/work:/opt/adguardhome/work
networks:
default:
ipv4_address: 192.168.123.101
clash:
container_name: Clash
image: dreamacro/clash-premium
volumes:
- /share/Container/Clash:/root/.config/clash
networks:
default:
ipv4_address: 192.168.123.102
networks:
default:
external: true
name: qnet-static-eth0-xxxxxx
限制资源使用量
对于 jellyfin 这种比较耗资源的应用,限制下 CPU 和 Memory 的使用还是很有必要的……
version: "3"
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
network_mode: "host"
volumes:
- /share/Container/Jellyfin/config:/config
- /share/Container/Jellyfin/cache:/cache
- /share/Multimedia:/media
restart: "unless-stopped" # 手动停止的话,下次重启 NAS 的时候不会自动启动
deploy:
# 这部分我理解为「最大分配多少」
resources:
limits:
cpus: "0.50"
memory: 512M
# 这部分我理解为「最少会分配多少」,我不太想开启
# reservations:
# cpus: "0.1"
# memory: 64M
这下子,如果需要升级镜像的话,就会方便很多:去拉一下 latest,然后所有 app/stack 无脑重建一下就好了。
哦对了,对于 docker-compose,container station 和 portainer 好像不能相互管理,即,用啥创建的,就得用啥管理……哎就这样吧~已经能方便不少了。
如果你啥啥东西搞错了……
Container Station 里面的逻辑很奇怪,就比如,如果 docker-compose 文件写错了导致 container 根本起不起来,那么你是删不掉这个 app/stack 的。
这个时候,就需要开启威联通的 SSH 模式,直接 SSH 进去将对应的东西干掉了。
使用 admin 账号,进入 QNAP。
如果你是想干掉某个 container,那么可以直接使用 docke
r 命令。
如果你是想管理 docker-compose,那么来到 /share/CACHEDEV1_DATA/Container/container-station-data/application
/ 。你会看到,所有的 app/stack 都在这里了,每个 app/stack 是一个目录,里面有 docker-compose.ym
l 文件,还有个 qnap.jso
n 文件。对于运行不起来的 app/stack,可以直接删除对应的文件夹,或者在这里修改 docker-compose.ym
l,直到运行起来为止。
PS:你会发现 Container Station 是用 Python 写的……(怪不得那么慢)
发表回复