Docker compose fiware WireCloud 数据持久性未从卷加载

Docker compose fiware WireCloud data persistance not loaded from volume

我正在为我的 FiWare WireCloud 使用 docker 容器。它工作正常但是当我用 docker 停止我的容器时 compose down 并用 docker compose up all 重新启动它即使我为 postgresql 数据库指定了一个卷,我的数据也会被删除,并且出现以下错误:

ERROR:  relation "wirecloud_workspace" does not exist at character 370

如果我想让它再次工作,我必须从头开始重新创建整个数据库(initdb 和 createsuperuser)

我想做的是能够将我的 wirecloud 数据保存在一个卷中,并能够备份和重新加载它。这是我当前的 docker-compose.yml 版本 3 中的文件:

version: '3.3'
services:

    iot-mongo:
        image: mongo:3.2
        ports:
         - "27017:27017"
        volumes:
            - ./data/mongo:/data/db

    orion:
      image: fiware/orion:1.9.0
      links:
        - iot-mongo
      ports:
        - "1026:1026"
      command: -dbhost iot-mongo


    nginx:
        restart: always
        image: nginx:1.13
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
            - ./nginx/sites-available:/etc/nginx/sites-available
            - ./letsencrypt/well-known:/www/letsencrypt
            - /etc/letsencrypt/:/etc/letsencrypt/
            - wirecloudwww:/var/www/static
            - wirecloudinstance:/opt/wirecloud_instance
        links:
            - wirecloud:wirecloud
            - orion:orion
    postgres:
        restart: always
        image: postgres:latest
        ports:
            - "5432:5432"
        volumes:
            - postgresdata:/var/lib/postgresql
        environment:
            POSTGRES_USER: postgres
            POSTGRES_PASSWORD:
            POSTGRES_DB: postgres
            PGDATA: /tmp
    wirecloud:
        restart: always
        image: fiware/wirecloud:1.0-composable
        links:
            - postgres:postgres
        volumes:
            - wirecloudwww:/var/www/static
            - wirecloudinstance:/opt/wirecloud_instance
    volumes:
        wirecloudwww: {}
        wirecloudinstance: {}
        postgresdata: {}

我也尝试使用 docker-compose v1,就像它们在 documentation 中显示的那样,但结果是一样的。

问题出在 postgres 卷和 PGDATA 环境变量的定义上。 PGDATA 环境告诉 PostgreSQL 将数据存储在 /tmp 中,因此它不会将数据存储在 de volume 中(您可以在 /tmp 上创建一个卷,但这似乎有点奇怪).如果删除 PGDATA 环境变量,postgres 会将数据存储到 /var/lib/postgresql/data。将此定义用于 postgres 服务应该可以解决问题:

postgres:
    restart: always
    image: postgres:latest
    ports:
        - "5432:5432"
    volumes:
        - postgresdata:/var/lib/postgresql/data
    environment:
        POSTGRES_USER: postgres
        POSTGRES_PASSWORD:
        POSTGRES_DB: postgres