docker里安装真正能用的fnos


目录
  1. 1. 原理
  2. 2. docker-compose.yml
  3. 3. 创建macvlan网络
  4. 4. 启动容器
  5. 5. 体验
  6. 6. 方法2

飞牛fnos是一款极具潜力的国产免费 NAS 系统,尤其适合新手用户和家庭用户。它的安装简单、界面精美易用,而且可以高效地利用闲置硬件,搭建 NAS 私人存储来替代网盘,并安装使用各种 Docker 应用。本文记录了docker中安装fnos的方法。

原理

基于项目https://github.com/qemus/qemu,在docker容器里通过qemu运行fnos。

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
services:
fnos:
image: ghcr.io/qemus/qemu:7.12
container_name: fnos
environment:
BOOT: "https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.11-946.iso"
RAM_SIZE: "2G"
CPU_CORES: "4"
DISK_SIZE: "16G"
DISK2_SIZE: "200G"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
volumes:
- /dir1:/storage
- /dir2:/storage2
restart: unless-stopped
stop_grace_period: 2m
networks:
vlan:
ipv4_address: 192.168.0.10
networks:
vlan:
external: true

environment:
BOOT: “https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.11-946.iso“ #飞牛os最新安装镜像地址
RAM_SIZE: “2G” #qemu设定的内存和核
CPU_CORES: “4”
DISK_SIZE: “16G” #飞牛系统盘大小
DISK2_SIZE: “200G” #数据盘大小
networks:设定飞牛系统本地IP

创建macvlan网络

在缺省网络模式下,qemu里运行的fnos无法通过IP从外部访问。

1
2
3
4
5
docker network create -d macvlan \
--subnet=192.168.0.0/24 \
--gateway=192.168.0.1 \
--ip-range=192.168.0.0/28 \
-o parent=ens133 vlan

ens133是本地网卡名,可通过ifconfig命令查看。

启动容器

1
2
docker compose pull
docker compose up -d

从ip:8006可以看到安装过程。

体验

安装完成后从ip:5666访问飞牛os。这里的ip是192.168.0.10,可根据需要更改。




这里挂载的硬盘就是/storage和/storage2,分别是在挂载的目录下创建了data.img磁盘。第一个磁盘用来安装飞牛系统,后一个磁盘是数据盘。

可以通过本地ip直接访问飞牛系统,也可以用官方自带的内网穿透从公网上访问本地fnos,FN ID是在官网上注册帐号后设定的访问ID。飞牛私有云app和飞牛影视app都是通过FN ID来远程访问的,免费的内网穿透带宽限定在2M bps。

从文件管理应用里可以挂载远程目录,比如smb,网盘等。由于使用了macvlan网络,fnos无法访问docker主机,如果smb在主机上,可通过第三个主机上lucky的端口转发来访问docker主机上的smb文件。
发现一个问题,飞牛影视不能播放4k视频,不知道是不是和主机的性能有关系。

方法2

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
services:
fnos:
image: ghcr.io/qemus/qemu:7.12
container_name: fnos
environment:
BOOT: "https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.11-946.iso"
RAM_SIZE: "2G"
CPU_CORES: "4"
DISK_SIZE: "16G"
DISK2_SIZE: "200G"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 5666:5666
volumes:
- /dir1:/storage
- /dir2:/storage2
restart: unless-stopped
stop_grace_period: 2m

macvlan不是必须的,只要把容器内的5666端口暴露出来就可以。

这里会产生一个新问题,飞牛os里的应用要从特定端口访问的话,要在ports段加上端口映射,可能会和docker主机里已有的开放端口相冲突。