主要是docker部署seafile专业版中的80端口问题
这是一篇使用docker部署seafile-pro的过程记录,当然这个过程是就我个人而言,可能无法解决你的问题
第一步当然是拉取seafile镜像了命令:
sudo docker pull docker.seafile.top/seafileltd/seafile-pro:latest
创建容器并运行命令:
第一个是一行的,后面的分成多行写了,都是一个相同命令
sudo docker run -d -it --name seafile -e SEAFILE_SERVER_HOSTNAME=使用的IP地址或域名 -e SEAFILE_ADMIN_EMAIL=用户邮箱(管理员用户名) -e SEAFILE_ADMIN_PASSWORD=管理员密码 -v 宿主机目录:/shared -p 宿主机端口:80 -p 宿主机端口:8000 -p 宿主机端口:8082 docker.seafile.top/seafileltd/seafile-pro:latest
sudo docker run -d -it --name seafile \
-e SEAFILE_SERVER_HOSTNAME=使用的IP地址或域名 \
-e SEAFILE_ADMIN_EMAIL=用户邮箱(管理员用户名) \
-e SEAFILE_ADMIN_PASSWORD=管理员密码 \
-v 宿主机目录:/shared \
-p 宿主机端口:80 \
-p 宿主机端口:8000 \
-p 宿主机端口:8082 \
docker.seafile.top/seafileltd/seafile-pro:latest
一定要为容器分配一个宿主机共享目录,这样我们的配置文件以及日志和上传的文件都会被保存在宿主机上的该目录中,而不会随容器的结束而消失
到此容器的创建就完成了 启动容器会自动按配置启动seaffile看起来是不是很简单,但是还有一些问题没说
端口问题:
默认使用的容器的端口是80,8000以及8082如果我们直接将它们映射到宿主机的80,8000和8082端口上,IP地址用的也是宿主机的IP地址的话,启动seafile和文件上传和下载应该是没问题的。
要想在互联网上使用云盘的话必须指定hostname为一个公网地址或域名,因为seafile所有的下载链接都是按这个地址来的
1,无法上传下载文件
但是:如果我们的宿主机的80端口被其他进程占用,我们就必须为容器指定其他端口,这样的话你会发现容器启动后虽然能够访问web界面但却无法上传和下载文件。因为默认接受文件上传和下载请求的是 :IP地址/seafhttp就是80/seafhttp,我们宿主机的80端口没有分配给容器自然无法处理这些请求数据
解决方法
法1:简单快捷
直接在web界面更改FILE_SERVER_ROOT
将映射到容器80端口的宿主机端口添上
http://ip地址:宿主机端口/seafhttp
这样文件上传和下载请求的数据就发送到了宿主机对应容器内80端口的端口上了
法2:麻烦,没试过
修改配置文件将处理web请求和文件上传和 下载的80端口改为其他端口,再将容器中的该端口映射到宿主机上相同的端口
法3:不太可行,没试过
在宿主机上配置nginx/Apache转发80/seafhttp的数据给容器的80端口,但是这样原来占用80端口的程序就不能运转了
2,分享的链接无效
问题和问题1差不多,分享的链接看似走的是8000端口,而实际上走的是80端口,
原因暂时不明
解决方法与问题差不多
把 SERVICE_URL 后面的8000改成宿主机上对应容器80端口的那个端口,
后面的不看也罢
原因:无论你外部的端口是如何映射的,但是seafile-pro镜像里面的配置文件中使用的端口是不变的,就是说如果不改变配置文件的话,容器内部使用的端口是一定的,而默认处理web请求以及处理文件上传和下载请求的都是内部的80端口,而且在seafile-pro中还默认启用了nginx来识别文件上传和下载请求。
在seafile的web界面里面的管理界面可以看到两个URL的配置:
SERVICE_URL
http://ip地址:8000
FILE_SERVER_ROOT
http://ip地址/seafhttp ///这里url中省略了端口号,其实这里完整的地址是 :
http://IP地址:80/seafhttp
当然其中的IP地址也可以换成域名
这里我们从每个URL后面的说明了解到文件不能上传和下载主要和第二个URL有关
我们所有的网络数据都是通过宿主机的端口然后再进入到容器内对应的端口的,前面说到文件上传和下载请求是发到80/seafhttp,除非你改了配置文件,否则文件上传和下载的请求都是发送到宿主机的80端口上的,而宿主机80端口不属于改容器,自然seafile-pro收不到请求。
解决方法:
1:更改接受文件上传和下载请求的端口为宿主机上对应容器80端口的端口
2:配置宿主机上的nginx/Apache转发来自80/seafhttp的数据给容器的80端口