You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Nextcloud+Nginx Proxy Manager无法访问求助

Debian 11 + Docker部署Nextcloud+Nginx Proxy Manager访问失败排查

操作背景与问题

在DigitalOcean的Debian 11服务器上部署Nextcloud+Nginx Proxy Manager(NPM),执行以下操作后访问域名失败、SSL配置报错:

  • 新增卷挂载到/var/lib/docker/volumes/volume_nyc1_01,调整docker-compose存储目录
  • 创建nextcloud文件夹及docker-compose.yml(代码见下文)
  • 在volume_nyc1_01下手动创建所需子文件夹
  • 在/var/lib/docker/volumes/volume_nyc1_01/nextcloud目录执行docker-compose up -d启动服务
  • 通过服务器IP:81登录NPM,创建代理主机将mydomain.com转发到nextcloud-app:80

核心问题与修复方案

1. Docker卷挂载逻辑错误

你当前的docker-compose.yml混淆了**Docker卷(named volume)与绑定挂载(bind mount)**的写法,导致容器存储路径完全错位。正确逻辑是:

  • 绑定挂载格式为/宿主机绝对路径:容器内路径,直接映射宿主机目录到容器
  • Docker卷由Docker自动管理存储位置,无需指定宿主机路径

修复后的docker-compose.yml(调整挂载+补充必要配置):

version: "3"
networks:
  frontend:
  backend:

services:
  nextcloud-app:
    image: nextcloud
    restart: always
    # 绑定挂载到新增卷的子目录
    volumes:
      - /var/lib/docker/volumes/volume_nyc1_01/nextcloud-html:/var/www/html
    environment:
      - MYSQL_PASSWORD=raspberrypi
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=nextcloud-db
      # 必须添加信任域名,否则Nextcloud会拦截访问
      - NEXTCLOUD_TRUSTED_DOMAINS=mydomain.com
    networks:
      - frontend
      - backend

  nextcloud-db:
    image: mariadb
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - /var/lib/docker/volumes/volume_nyc1_01/nextcloud-db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=raspberrypi
      - MYSQL_PASSWORD=raspberrypi
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    networks:
      - backend

  npm-app:
    image: jc21/nginx-proxy-manager:latest
    restart: always
    ports:
      - "80:80"
      - "81:81"
      - "443:443"
    environment:
      - DB_MYSQL_HOST=npm-db
      - DB_MYSQL_PORT=3306
      - DB_MYSQL_USER=npm
      - DB_MYSQL_PASSWORD=raspberrypi
      - DB_MYSQL_NAME=npm
    volumes:
      - /var/lib/docker/volumes/volume_nyc1_01/npm-data:/data
      - /var/lib/docker/volumes/volume_nyc1_01/npm-ssl:/etc/letsencrypt
    networks:
      - frontend
      - backend

  npm-db:
    image: jc21/mariadb-aria:latest
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=raspberrypi
      - MYSQL_DATABASE=npm
      - MYSQL_USER=npm
      - MYSQL_PASSWORD=raspberrypi
    volumes:
      - /var/lib/docker/volumes/volume_nyc1_01/npm-db:/var/lib/mysql
    networks:
      - backend

2. Nextcloud信任域名缺失

Nextcloud默认仅信任localhost与服务器IP,必须将自定义域名加入信任列表:

  • 若已启动容器,可执行以下命令补充:
docker exec -it $(docker ps -q --filter name=nextcloud-app) php occ config:system:set trusted_domains 1 --value=mydomain.com

(注:数字1为信任域名的索引,若已有IP作为第1个信任项,可改为2)

3. NPM代理配置补充检查

  • 代理主机的转发主机名/IP必须填写nextcloud-app(Docker服务名,同一网络内可直接解析),转发端口为80
  • 强制开启Websockets支持选项,Nextcloud依赖该功能
  • SSL配置前确认:域名DNS已指向服务器公网IP,服务器防火墙、DigitalOcean安全组已开放80/443端口
  • SSL证书选择Let's Encrypt,填写有效邮箱,勾选Force SSL与HTTP/2 Support

4. 权限与日志排查

  • 修复宿主机目录权限,确保Docker进程可读写:
chown -R www-data:www-data /var/lib/docker/volumes/volume_nyc1_01/nextcloud-html
chmod -R 755 /var/lib/docker/volumes/volume_nyc1_01/
  • 查看容器日志定位具体错误:
# 查看Nextcloud日志
docker logs nextcloud-app
# 查看NPM日志
docker logs npm-app
# 查看数据库日志
docker logs nextcloud-db
docker logs npm-db

内容的提问来源于stack exchange,提问作者nick_fh_cl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:01:03