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

Docker环境下Nextcloud连接PostgreSQL遇未知主机及内部错误求助

问题分析与解决方案

核心问题

你遇到的数据库无法识别问题,根源在于所有服务都指定了network_mode: bridge:

  • Docker默认的bridge网络不支持容器间通过服务名(如db)解析通信,只能用容器IP,导致Nextcloud配置的POSTGRES_HOST=db无法找到PostgreSQL容器。
  • 后续修改为172.17.0.1:5432时,PostgreSQL默认仅监听容器内部IP,拒绝来自宿主机网关的外部连接,因此触发内部错误。

修复步骤

1. 调整Docker Compose配置

移除所有服务的network_mode: bridge,让Compose自动创建专属自定义网络(容器间可直接用服务名通信),调整后的配置如下:

version: '3'

services:
  db:
    image: postgres:alpine
    hostname: db
    restart: always
    volumes:
      - /var/lib/docker/volumes/nextcloud/postgres:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=nextcloud_db
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=admin

  redis:
    image: redis:alpine
    restart: always

  app:
    image: nextcloud:apache
    restart: always
    ports:
      - 172.17.0.1:8080:80
    volumes:
      - /var/lib/docker/volumes/nextcloud/nextcloud:/var/www/html
    environment:
      - POSTGRES_HOST=db
      - POSTGRES_DB=nextcloud_db
      - POSTGRES_USER=nextcloud
      - POSTGRES_PASSWORD=admin
      - REDIS_HOST=redis
    depends_on:
      - db
      - redis
  • 无需给PostgreSQL映射宿主机端口(除非你需要从宿主机外部直接连接数据库),自定义网络内容器可直接通过服务名db通信。

2. 重新部署服务

执行以下命令清理旧容器并启动新配置:

# 停止并移除当前运行的容器和网络
docker-compose down
# 后台启动新服务
docker-compose up -d

3. 验证通信(可选)

部署完成后,可进入Nextcloud容器测试数据库连接:

# 进入Nextcloud容器(替换<容器名>为实际容器名称)
docker exec -it <容器名> bash
# 安装PostgreSQL客户端
apt update && apt install -y postgresql-client
# 测试数据库连接
psql -h db -U nextcloud -d nextcloud_db

输入密码admin后能正常进入数据库,说明通信配置正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:26:15