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

Postgresql Docker compose fiware WireCloud数据持久性未从卷加载,postgresql,docker-compose,fiware,fiware-wirecloud,Postgresql,Docker Compose,Fiware,Fiware Wirecloud,我正在为FiWare WireCloud使用docker容器。它工作正常,但当我使用docker compose down停止容器,并使用docker compose up重新启动容器时,即使我为postgresql数据库指定了一个卷,我的所有数据都将被擦除,并且出现以下错误: ERROR: relation "wirecloud_workspace" does not exist at character 370 如果我想让它再次工作,我必须从头开始重新创建整个数据库(initdb&cre

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

ERROR:  relation "wirecloud_workspace" does not exist at character 370
如果我想让它再次工作,我必须从头开始重新创建整个数据库(initdb&createsuperuser)

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

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,如中所示,但结果是一样的。

问题在于postgres卷和
PGDATA
环境变量的定义。
PGDATA
环境告诉PostgreSQL在
/tmp
中存储数据,因此它不会在de卷中存储数据(您可以在
/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