docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Dify Docker私有化部署问题

Dify Docker私有化部署遇到的问题及解决

作者:mengyanyuan8023

Dify 1.01 在 Docker Desktop 4.38.0 上部署时,db 无法启动,权限问题导致,解决方法是修改 `docker-compose.yaml` 文件,为 `db` 配置正确的权限,并创建一个名为 `postgres-data101` 的 Volume 区

Dify 版本为1.01,本地使用 docker desktop,版本为4.38.0 (181591),以下是Dify部署及使用过程中遇到的问题,后续持续更新...

db无法启动

一直提示:

Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).

具体日志如下:

​在windows11下部署dify报错

db-1  | The files belonging to this database system will be owned by user "postgres".
db-1  | This user must also own the server process.
db-1  |
db-1  | The database cluster will be initialized with locale "en_US.utf8".
db-1  | The default database encoding has accordingly been set to "UTF8".
db-1  | The default text search configuration will be set to "english".
db-1  |
db-1  | Data page checksums are disabled.
db-1  |
db-1  | fixing permissions on existing directory /var/lib/postgresql/data/pgdata ... ok
db-1  | creating subdirectories ... ok
db-1  | selecting dynamic shared memory implementation ... posix
db-1  | selecting default max_connections ... 20
db-1  | selecting default shared_buffers ... 400kB
db-1  | selecting default time zone ... UTC
db-1  | creating configuration files ... ok
db-1  | 2025-02-28 16:06:21.008 UTC [63] FATAL:  data directory "/var/lib/postgresql/data/pgdata" has invalid permissions
db-1  | 2025-02-28 16:06:21.008 UTC [63] DETAIL:  Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
db-1  | child process exited with exit code 1
db-1  | initdb: removing contents of data directory "/var/lib/postgresql/data/pgdata"
db-1 exited with code 1

具体原因日志中已经给出,如下:

db-1  | 2025-02-28 16:06:21.008 UTC [63] FATAL:  data directory "/var/lib/postgresql/data/pgdata" has invalid permissions
db-1  | 2025-02-28 16:06:21.008 UTC [63] DETAIL:  Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).

解决办法

修改 docker-compose.yaml 文件,找到 db 的配置,初始配置如下:

 # The postgres database.
  db:
    image: postgres:15-alpine
    restart: always
    environment:
      PGUSER: ${PGUSER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456}
      POSTGRES_DB: ${POSTGRES_DB:-dify}
      PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata}
    command: >
      postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}'
               -c 'shared_buffers=${POSTGRES_SHARED_BUFFERS:-128MB}'
               -c 'work_mem=${POSTGRES_WORK_MEM:-4MB}'
               -c 'maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}'
               -c 'effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}'
    volumes:
      - ./volumes/db/data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: [ 'CMD', 'pg_isready' ]
      interval: 1s
      timeout: 3s
      retries: 30

将其修改为:

 # The postgres database.
  db:
    image: postgres:15-alpine
    restart: always
    environment:
      PGUSER: ${PGUSER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456}
      POSTGRES_DB: ${POSTGRES_DB:-dify}
      PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata}
    command: >
      postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}'
               -c 'shared_buffers=${POSTGRES_SHARED_BUFFERS:-128MB}'
               -c 'work_mem=${POSTGRES_WORK_MEM:-4MB}'
               -c 'maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}'
               -c 'effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}'
    #volumes:
    #  - ./volumes/db/data:/var/lib/postgresql/data
    volumes:
      - postgres-data101:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: [ 'CMD', 'pg_isready' ]
      interval: 1s
      timeout: 3s
      retries: 30

这里创建了一个名为postgres-data101的 Volume 区,然后在文件最底部添加该 Volume 区:

volumes:
  oradata:
  dify_es01_data:
  postgres-data101:

Docker重新启动后Dify需要重新初始化

该问题可以用上面的方式解决,根本原因都是因为 Volume 挂在异常。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文