Seafile 的 官方文档 写得很详细,如果你使用的是 Linux 环境下的 docker,应该不存在任何问题。这片博文主要是讲 Windows Docker 下我遇到的 Seafile 私有网盘搭建过程中的问题和解决方法。

Docker-compose 配置

首先下载 docker-compose.yml 到本地你选定的文件夹,如 C:\seafile 中。按照官方文档,有几个地方需要更改:

  • MySQL 默认的密码
  • 持久化 MySQL 数据的文件映射(volumes)
  • 持久化 Seafile 数据的文件映射(volumes)

Windows 下 docker-compose 的路径映射

Windows Docker Desktop 下,可以这样书写 volumes:

volumes: 
  - d:/seafile/mysql:/var/lib/mysql

如果你是在 WSL 下跑 Windows Docker,那么 /mnt/d 这样的路径是不能用的。因为实际上这是连接的远程 docker,不能用本地路径。

mariaDB 在 Windows 下无法映射

默认的 docker-compose.yml 中引用的是 mariaDB,这个镜像在 Windows docker 下有点问题,无法正常进行文件映射。解决方法有两个:

  1. 不进行映射,使用 container 内置空间。不推荐,如果手滑 docker-compose down 了,数据就丢了。
  2. 使用 SQLite 替代 MariaDB,推荐。但很可惜我不知道怎么在 docker 下这么做,如果有知道的同学还请不吝赐教。
  3. 将 MariaDB 更换 MySQL 镜像,推荐。将 docker-compose.yml 更改为如下即可。
db:
  image: mysql:5.7

Windows 防火墙无法通过

有几种方法对 Seafile 的网页版服务进行访问:

  • 使用本地 loopback(127.0.0.1)访问
  • 使用局域网地址(10.x.y.z192.168.x.y )进行访问
  • 使用公网地址进行访问
  • 将上列 IP 绑定你的域名后进行访问。

因为我家里没有公网 IP,而且没有暴露在公网的需求,所以我采用域名绑定局域网地址的方式。将 seafile.204896.xyz 解析到 192.168.31.157 即可。在电脑上直接访问 seafile.204896.xyz ,可以正常访问。

但是在局域网另外的设备上却显示访问失败。经过排查,是 Windows 防火墙挡住了流量。最简单粗暴的方式是直接关掉防火墙,但是最好还是允许 docker 通过防火墙。

运行 netstat -a -b 命令,找到使用 80 端口的程序:

# netstat -a -b
协议  本地地址          外部地址        状态
  TCP    0.0.0.0:80             HOME:0                 LISTENING
 [com.docker.backend.exe]

显然,docker 的服务文件名为 com.docker.backend.exe,其路径在 C:\Program Files\Docker\Docker\resources\com.docker.backend.exe,我们将其加入 Windows 防火墙的规则中即可。这样在局域网其他设备上就可以正常访问了。

0 comments