======浏览器版======
浏览器版这类 docker 烂大街, 有很多个. 随便捡一个来用. 注意下方中文修改成你自己的数据.
强制解析了几个域名, 因为都是垃圾域名, 没有用, 去掉也行.
docker run -d \
--name 115 \
--security-opt seccomp:unconfined \
-e PUID=0 \
-e PGID=0 \
--user 0:0 \
--add-host pc.115.com:255.255.255.255 \
--add-host xue.115.com:255.255.255.255 \
--add-host union.115.com:255.255.255.255 \
--add-host appversion.115.com:255.255.255.255 \
--add-host act.115.com:255.255.255.255 \
--add-host job.115.com:255.255.255.255 \
-e PASSWORD=你的网页版VNC登录密码 \
-e DISPLAY_WIDTH=1920 \
-e DISPLAY_HEIGHT=1080 \
-e COOKIE_CID="" \
-e COOKIE_SEID="" \
-e COOKIE_UID="" \
-e COOKIE_KID="" \
-e TZ=Asia/Shanghai \
-e LC_ALL=zh_CN.UTF-8 \
-v /mnt/hdd/files左边是你的实机目录用于存放下载数据_右边不要动:/opt/Downloads \
-v /root/115左边是115浏览器的userdata数据目录_右边不要动:/etc/115 \
-p 127.0.0.1:1150:1150 \
--shm-size 1gb \
--restart unless-stopped \
ghcr.io/dream10201/115docker:latest
直接跑起来就行. 随后网页访问 域名或IP:1150 或者使用反向代理工具代理网页. 如 Traefik 使用目录的方式反向代理:
http:
routers:
115-router:
entryPoints:
- "http"
- "https"
rule: "Host(`你的.域名`) && PathPrefix(`/你的目录/`)"
service: "115-service"
middlewares:
- "strip-115-prefix"
middlewares:
strip-115-prefix:
stripPrefix:
prefixes:
- "/你的目录/"
services:
115-service:
loadBalancer:
servers:
- url: "http://127.0.0.1:1150"
======客户端版======
先说限制条件, 我的小鸡都是 x86_64 架构的, 没有图形界面, 所以才打算拿 docker 封装 Linux 原生客户端, 通过网页访问方便管理. 纯下载文件用, 如果你是流媒体需求, 请忽略本文.
所以如果你是 arm arm64 mips 之类的, 那我没有现成的东西给你, 首先 115 官方截止 20261005 就没有开发 arm 架构的原生客户端, 我不确定 arm 架构的 Linux 系统上能不能跑 x86_64 架构客户端打包而成的容器. 你可以试试. 将我下面的三个文件喂给 ai 让它辅助修改.
还有一个可选项, 就是 docker 开启 IPv6, 我不知道 115 平台普及 IPv6 了没有, 我习惯是开起来. 这个要修改 /etc/docker/daemon.json, 有问题善用搜索和 ai, 不展开讲了.
115 原生的 Linux 客户端, 这个就要好好讲讲了, 客户端是 115 在 2026 年新开发的基于 .NET 的 Avalonia UI 做的新版客户端, 长得有点像 Electron 但实际不是, 点击按钮的手感有一点偏 qt, 但没 qt 那种卡顿感.
这个 docker 在网上没有, 我自己拿两个 ai 研究出来的, 所以以下代码由 ChatGPT 和 DeepSeek 生成. 我只负责研究报错, 分析原因.
网上没有就要实机编译, 编译预留大概 6 GB 空间, 编译出来的 image 也就是镜像, 以当前的 115 原生客户端版本来看, 做好的镜像是 2.93 GB, 这只是 docker image 看到的大小, 实际还要跑起来, 再加上编译的那些数据, 如果空间不够, 你可以在自己电脑上用 VMware 或者 VirtualBox 建一个虚拟机, 编译好了, 打包上传到服务器导入. 简单说说导出导入方法:
docker 的镜像可以本机导出, 再导入到其它机器上运行. 只带 image 镜像, 不带 container 容器运行数据.
docker save 115:latest -o 115.tar
docker save 115:latest | gzip -9 > 115.tar.gz
docker save 115:latest | xz -9 -T0 > 115.tar.xz
三选一, 压缩率从低到高, 所以文件也从大到小.
导入:
docker load -i 115.tar
docker load -i 115.tar.gz
docker load -i 115.tar.xz
如果你要带着容器数据迁移 dockerd 和 containerd... 那就扯得更远了, 也很复杂, 单独讲解, 参见 [193 docker 迁移目录和数据 包括 docker 和 containerd | 解决迁移之后依旧存储在原目录的问题].
好了, 准备阶段的知识就先啰嗦这么多, 上代码. 这代码是 ai 生成, 可能有屎山, 自行甄别. 我在 Windows 10 的电脑上, 用 VirtualBox 跑 Ubuntu 24.04.1 LTS 是能把 docker 完整编译完, 也能导出成压缩包.
下面这三个文件, 放在同一个目录中. 第一个文件 Dockerfile:
FROM jlesage/baseimage-gui:ubuntu-24.04-v4.13.2
LABEL maintainer="lampoppa <lampooppa@gmail.com>"
ENV APP_NAME="115pc"
ENV APP_VERSION="37.3.1"
ENV USER_ID=0
ENV GROUP_ID=0
ENV ENABLE_CJK_FONT=1
ENV DISPLAY_WIDTH="1920"
ENV DISPLAY_HEIGHT="1080"
# 1. 修复 /etc/passwd、/etc/group,并补回缺失目录
RUN rm -f /etc/passwd /etc/group /etc/shadow /etc/gshadow && \
cp /usr/share/base-passwd/passwd.master /etc/passwd && \
cp /usr/share/base-passwd/group.master /etc/group && \
touch /etc/shadow /etc/gshadow && \
chmod 640 /etc/shadow /etc/gshadow && \
chmod 644 /etc/passwd /etc/group && \
rm -f /var/log /var/tmp && \
mkdir -p /var/log /var/tmp /var/lib/dbus /var/lib/misc && \
chmod 1777 /var/tmp
# 2. 移除 dbus 状态覆盖(可选)
RUN dpkg-statoverride --remove /var/run/dbus 2>/dev/null || true
# 3. 安装软件包(用 C locale 避免警告)
RUN LANG=C LC_ALL=C apt-get update && \
LANG=C LC_ALL=C apt-get install -y \
curl \
wget \
gdebi-core \
locales \
fonts-wqy-zenhei \
fonts-wqy-microhei \
fonts-noto-cjk \
fontconfig \
dbus \
dbus-x11 \
desktop-file-utils \
libwebkit2gtk-4.1-0 \
libsecret-1-0 \
libnotify4 \
libgtk-3-0 \
libva2 \
libva-drm2 \
xdg-utils && \
rm -rf /var/lib/apt/lists/*
# 4. 生成中文 locale
RUN sed -i 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen && \
locale-gen
ENV LANG=zh_CN.UTF-8 \
LANGUAGE=zh_CN:zh \
LC_ALL=zh_CN.UTF-8
# 5. 刷新字体缓存
RUN fc-cache -fv
# 6. 下载并安装 115Life(apt 无法自动解决依赖)
RUN curl -L https://down.115.com/client/115pc/lin/115Life_${APP_VERSION}.deb -o /tmp/115Life_${APP_VERSION}.deb && \
apt-get install -y /tmp/115Life_${APP_VERSION}.deb && \
rm -f /tmp/115Life_${APP_VERSION}.deb
# 7. D-Bus 初始化脚本
COPY init-dbus.sh /etc/cont-init.d/99-init-dbus.sh
RUN chmod +x /etc/cont-init.d/99-init-dbus.sh
COPY startapp.sh /startapp.sh
RUN chmod +x /startapp.sh第二个文件 init-dbus.sh:
#!/bin/sh
# 初始化 D-Bus system daemon
mkdir -p /var/run/dbus
dbus-daemon --system --fork 2>/dev/null || true
echo "D-Bus initialization completed"
第三个文件 startapp.sh:
#!/bin/sh
if [ ! -d '/Downloads' ]; then
mkdir -p '/Downloads'
chmod a+w '/Downloads'
else
echo "Folder /Downloads already exists!"
fi
# 如果 session D-Bus 没启动,则启动它
if ! pgrep -x "dbus-daemon" > /dev/null 2>&1; then
dbus-daemon --session --fork 2>/dev/null || true
fi
# 澳大利亚伯斯时间, 个人喜好
export TZ=Australia/Perth
# 中文环境
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh
export LC_CTYPE=zh_CN.UTF-8
export LC_NUMERIC=zh_CN.UTF-8
export LC_TIME=en_US.UTF-8
export LC_COLLATE=zh_CN.UTF-8
export LC_MONETARY=zh_CN.UTF-8
export LC_MESSAGES=zh_CN.UTF-8
export LC_PAPER=zh_CN.UTF-8
export LC_NAME=zh_CN.UTF-8
export LC_ADDRESS=zh_CN.UTF-8
export LC_TELEPHONE=zh_CN.UTF-8
export LC_MEASUREMENT=zh_CN.UTF-8
export LC_IDENTIFICATION=zh_CN.UTF-8
fc-cache -fv 2>/dev/null || true
exec /usr/bin/115life
准备好三个文件后, 给全部权限, 然后开始编译:
docker build -t 115 .
上面末尾有个小数点请注意.
编译好了就可以运行了:
docker run -d \
--name 115 \
-p 127.0.0.1:1150:5800 \
-v /root/115目录里似乎没有登录数据, 在哪我不知道, 反正重启容器不丢:/config \
-v /mnt/hdd/files你的存储盘目录:/Downloads \
--restart unless-stopped \
115:latest
网页点开即是图形界面, 没有密码保护, 如果放在公网上, 必须要通过 Traefik 或者其它反向代理软件如 Nginx caddy, 加一个 basicauth 或者其它高级认证, 我以 Traefik 的目录反代添加 basicauth 为例, config/115.yaml 动态配置文件:
http:
routers:
115-router:
entryPoints:
- "http"
- "https"
rule: "Host(`你的.域名`) && PathPrefix(`/115的网页版文件夹/`)"
service: "115-service"
middlewares:
- "strip-115-prefix"
- "auth-115"
middlewares:
strip-115-prefix:
stripPrefix:
prefixes:
- "/115的网页版文件夹/"
auth-115:
basicAuth:
users: #https://rivers.chaitin.cn/tools/htpasswd 可以使用 bcrypt 算法在线加密
- "root:$2a$10$加密的密钥, root 是用户名"
services:
115-service:
loadBalancer:
servers:
- url: "http://127.0.0.1:1150"
下载文件前, 要更改软件内下载目录. 默认在 /config/Downloads, 改成 /Downloads
如果加了 basicauth, 首次访问为了方便可以直接请求:
https://用户名:密码@你的.域名/115目录/
会看到报错,
Unexpected error encountered:
Could not load web data: TypeError: Window.fetch: ./webdata.json is an url with embedded credentials.
fetchWebData/<@*****/app/ui.js
在浏览器地址栏回车一次, 就能正常访问了.
运行整个流程包括上传下载都没有问题之后, 自己搜清理 docker build 缓存教程. 不展开了.
为啥不用浏览器 docker? 上面那个浏览器 docker 下载大文件夹总会提示 磁盘空间不足, 上级目录给足权限了也没搞定. 另外 .NET framework Avalonia UI 这套东西虽然占用大, 但性能好一些, 我那石头盘可以到很不错的写入速度, 比浏览器好太多. 所以, 自己就参考 https://github.com/badmintoncat/115-client-docker (这个项目也是浏览器, 看得像原生客户端一样... 你看 Dockerfile 里面下载 deb 的地址带 br 就知道了) 重新做了一个 Linux 原生客户端.
为啥不用 OpenList 这类存储聚合? 我要下 1TB 的数据, 防止 115 以各种理由封号 (没有过但是我担心有).
附图一张😁 这新版界面的火狐也是丑得不行... 网页左侧是可以隐藏的悬浮窗, 和其它 vnc 一样, 带一个画质调节和剪贴板的基础功能.
没有任务栏多程序啥的. 需要你可以自己加, 我这是一次性 docker, 只下载 1TB 数据, 你想长期使用的话, 可以把上面三个文件喂给 ai 让它研究研究.
