Docker создает постоянные данные Fiware WireCloud, которые не загружаются с тома

Я использую док-контейнер для своего FiWare WireCloud. Он работает правильно, но когда я останавливаю свой контейнер с помощью docker compose down и перезапускаю его с помощью docker compose up, все мои данные стираются, даже если я указал том для базы данных postgresql и у меня следующая ошибка:

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

Если я хочу, чтобы он снова заработал, мне нужно воссоздать всю базу данных с нуля (initdb и createduperuser)

Что я хотел бы сделать, так это иметь возможность сохранять мои данные 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, как показано в документация, но результат тот же.


person lmoor    schedule 11.12.2017    source источник


Ответы (1)


Проблема заключается в определении тома postgres и переменной окружения PGDATA. Среда PGDATA сообщает PostgreSQL хранить данные в /tmp, поэтому он не собирается хранить данные внутри тома (вы можете создать том на /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
person Álvaro Arranz    schedule 12.12.2017