
!Docker Pulls  apt install docker-compose-v2
shdocker run -d --restart unless-stopped --log-opt max-size=10m \ -p 8080:80 \ -e TZ=Asia/Shanghai \ -e 'CRON_MIN=1,31' \ -v freshrss_data:/var/www/FreshRSS/data \ -v freshrss_extensions:/var/www/FreshRSS/extensions \ --name freshrss \ freshrss/freshrss
参数说明:
-p 8080:80:将容器 80 端口映射到主机 8080 端口-e TZ=Asia/Shanghai:设置时区(默认 UTC)-e 'CRON_MIN=1,31':设置定时刷新订阅的分钟数(每小时的第 1 和 31 分钟)-v freshrss_data:/var/www/FreshRSS/data:持久化存储数据-v freshrss_extensions:/var/www/FreshRSS/extensions:持久化存储扩展通过浏览器访问 [***],通过 FreshRSS 网页界面完成安装,或使用命令行方式(见下文)。
可通过容器内的 CLI 命令管理 FreshRSS,命令格式:
shdocker exec --user www-data freshrss 命令
注意:使用 Alpine 版本镜像时,需将
--user www-data替换为--user apache
sh# 执行基础安装 docker exec --user www-data freshrss cli/do-install.php --default-user freshrss # 创建管理员用户 docker exec --user www-data freshrss cli/create-user.php --user freshrss --password freshrss
sh# 列出所有用户 docker exec --user www-data freshrss cli/list-users.php # 更新所有订阅源 docker exec --user www-data freshrss cli/actualize-user.php --user freshrss
Docker 镜像标签对应不同的 FreshRSS 版本和分支:
| 标签格式 | 说明 |
|---|---|
:latest | 默认标签,指向最新稳定版 |
:edge | 滚动更新版本,对应 git 的 edge 分支 |
:x.y.z | 特定版本,如 :1.21.0 |
:x | 主版本系列,如 :1 会自动更新到最新的 1.x 版本 |
*-alpine | 基于 Alpine Linux 的轻量版本,如 :latest-alpine |
| 变量名 | 默认值 | 说明 |
|---|---|---|
TZ | UTC | 服务器时区,参考 PHP 时区列表 |
CRON_MIN | 未设置 | cron 任务分钟数,如 1,31 表示每小时的第 1 和 31 分钟执行 |
DATA_PATH | 空 | 可写数据路径,由 constants.php 或 constants.local.php 定义 |
FRESHRSS_ENV | production | 运行环境,设为 development 启用开发模式(更多日志输出) |
COPY_LOG_TO_SYSLOG | On | 是否将日志复制到 syslog |
COPY_SYSLOG_TO_STDERR | On | 是否将 syslog 复制到标准错误输出(docker logs 可见) |
LISTEN | 80 | 内部 Apache 监听地址和端口,如 0.0.0.0:8080 |
FRESHRSS_INSTALL | 未设置 | 自动安装参数,仅在首次运行时生效 |
FRESHRSS_USER | 未设置 | 自动创建用户参数,仅在首次运行时生效 |
TRUSTED_PROXY | 未设置 | 受信任代理 IP 范围,影响日志记录和外部认证 |
OIDC_ENABLED | 0 | 是否启用 OpenID Connect 认证(仅 Debian 版本支持) |
sh# 拉取最新镜像 docker pull freshrss/freshrss # 停止并备份当前容器 docker stop freshrss docker rename freshrss freshrss_old # 启动新容器(使用之前的运行命令) docker run ... --name freshrss freshrss/freshrss # 确认正常运行后删除旧容器 docker rm freshrss_old
对于 Docker Hub 未提供的架构(如非 x64/arm 平台),可自行构建镜像:
sh# 构建 Alpine 版本(latest 分支) docker build --pull --tag freshrss/freshrss:latest -f Docker/Dockerfile-Alpine [***] # 构建 Debian 版本(edge 分支) docker build --pull --tag freshrss/freshrss:edge -f Docker/Dockerfile [***]
挂载本地代码目录进行开发:
shcd ./FreshRSS/ docker run --rm \ -p 8080:80 \ -e FRESHRSS_ENV=development \ -e TZ=Asia/Shanghai \ -e 'CRON_MIN=1,31' \ -v $(pwd):/var/www/FreshRSS \ -v freshrss_data:/var/www/FreshRSS/data \ --name freshrss \ freshrss/freshrss:edge
此命令会将当前目录的代码挂载到容器中,在 8080 端口启动服务,并输出详细日志。按 Ctrl+C 停止服务。
FreshRSS 默认使用 SQLite 数据库,也可配置 PostgreSQL 或 MySQL/MariaDB。
shdocker network create freshrss-network
sh# 启动 PostgreSQL 容器 docker run -d --restart unless-stopped --log-opt max-size=10m \ -v pgsql_data:/var/lib/postgresql/data \ -e POSTGRES_DB=freshrss \ -e POSTGRES_USER=freshrss \ -e POSTGRES_PASSWORD=freshrss \ --net freshrss-network \ --name freshrss-db postgres
在 FreshRSS 安装界面中,数据库主机填写容器名 freshrss-db。
sh# 启动 MariaDB 容器 docker run -d --restart unless-stopped --log-opt max-size=10m \ -v mysql_data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=rootpass \ -e MYSQL_DATABASE=freshrss \ -e MYSQL_USER=freshrss \ -e MYSQL_PASSWORD=freshrss \ --net freshrss-network \ --name freshrss-db mariadb
创建 .env 文件:
iniBASE_URL=[***] ADMIN_EMAIL=*** ADMIN_PASSWORD=your_secure_password ADMIN_API_PASSWORD=your_api_password PUBLISHED_PORT=8080 DB_HOST=freshrss-db DB_BASE=freshrss DB_PASSWORD=freshrss DB_USER=freshrss
yamlvolumes: data: extensions: db_data: services: freshrss: image: freshrss/freshrss:latest restart: unless-stopped logging: options: max-size: 10m ports: - "${PUBLISHED_PORT}:80" volumes: - data:/var/www/FreshRSS/data - extensions:/var/www/FreshRSS/extensions environment: TZ: Asia/Shanghai CRON_MIN: '2,32' FRESHRSS_ENV: production LISTEN: 0.0.0.0:80 TRUSTED_PROXY: 172.16.0.1/12 192.168.0.1/16 FRESHRSS_INSTALL: |- --api-enabled --base-url ${BASE_URL} --db-base ${DB_BASE} --db-host ${DB_HOST} --db-password ${DB_PASSWORD} --db-type pgsql --db-user ${DB_USER} --default-user admin --language zh-CN FRESHRSS_USER: |- --api-password ${ADMIN_API_PASSWORD} --email ${ADMIN_EMAIL} --language zh-CN --password ${ADMIN_PASSWORD} --user admin depends_on: - freshrss-db networks: - freshrss-network freshrss-db: image: postgres:14-alpine restart: unless-stopped logging: options: max-size: 10m volumes: - db_data:/var/lib/postgresql/data environment: POSTGRES_DB: ${DB_BASE} POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} networks: - freshrss-network networks: freshrss-network:
sh# 启动服务 docker compose up -d # 查看日志 docker compose logs -f --timestamps # 停止服务 docker compose down --remove-orphans
在 docker-compose.yml 中添加 Traefik 标签:
yamllabels: - traefik.enable=true - traefik.http.routers.freshrss.rule=Host(`freshrss.example.com`) - traefik.http.routers.freshrss.entrypoints=websecure - traefik.http.routers.freshrss.tls.certresolver=myresolver
yamllabels: - traefik.enable=true - traefik.http.middlewares.freshrss-stripprefix.stripprefix.prefixes=/freshrss - traefik.http.routers.freshrss.middlewares=freshrss-stripprefix - traefik.http.routers.freshrss.rule=PathPrefix(`/freshrss`) - traefik.http.routers.freshrss.entrypoints=websecure - traefik.http.routers.freshrss.tls.certresolver=myresolver
作为子目录部署的 Apache 配置示例:
apacheProxyPreserveHost On <Location /freshrss/> ProxyPass [***] ProxyPassReverse [***] RequestHeader set X-Forwarded-Prefix "/freshrss" RequestHeader set X-Forwarded-Proto "https" Require all granted Options none </Location>
nginxupstream freshrss { server 127.0.0.1:8080; keepalive 64; } server { listen 80; server_name example.com; return 301 [***] } server { listen 443 ssl http2; server_name example.com; # SSL 配置省略 location /freshrss/ { proxy_pass [***] add_header X-Frame-Options SAMEORIGIN; add_header X-XSS-Protection "1; mode=block"; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Prefix /freshrss/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_read_timeout 90; proxy_set_header Authorization $http_authorization; proxy_pass_header Authorization; } }
通过 CRON_MIN 环境变量启用,如:
shdocker run ... -e 'CRON_MIN=13,43' ... freshrss/freshrss
在主机创建 cron 任务:
text7,37 * * * * root docker exec --user www-data freshrss php ./app/actualize_script.php > /tmp/FreshRSS.log 2>&1
Debian 版本示例:
shdocker run -d --restart unless-stopped --log-opt max-size=10m \ -v freshrss_data:/var/www/FreshRSS/data \ -v freshrss_extensions:/var/www/FreshRSS/extensions \ -e 'CRON_MIN=17,47' \ --net freshrss-network \ --name freshrss_cron freshrss/freshrss \ cron -f
FreshRSS 配置存储在 data/config.php 中,可通过以下步骤修改:
sh# 查看数据卷路径 docker volume inspect freshrss_data # 编辑配置文件(路径可能不同,请根据实际输出调整) sudo nano /var/lib/docker/volumes/freshrss_data/_data/config.php # 重启容器使配置生效 docker restart freshrss
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429