2017-12-11 6 views
1

Ich benutze einen Docker Container für meine FiWare WireCloud. Es funktioniert einwandfrei, aber wenn ich meine Behälter mit Docker stoppen komponieren nach unten und starten Sie ihn mit Docker komponieren bis alle meine Daten auch gelöscht werden, wenn ich ein Volumen für die PostgreSQL-Datenbank angegeben, und ich habe den folgenden Fehler:Docker komponieren fiware WireCloud Daten persistance nicht geladen von Volumen

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

Wenn ich will es wieder arbeiten, ich habe die ganze Datenbank von Grund auf neu erstellen (initdb & createsuperuser)

Was würde ich zu tun ist in der Lage sein, meine wirecloud Daten in einem Volumen zu speichern und in der Lage sein, es zu sichern und neu zu laden. Hier ist meine aktuelle Docker-compose.yml Datei in Version 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: {} 

ich auch versucht, mit Docker-compose v1, wie sie in den documentation zeigen, aber das Ergebnis ist das gleiche.

Antwort

1

Das Problem ist die Definition des Postgres-Volumes und der Umgebungsvariablen PGDATA. Die PGDATA-Umgebung sagt PostgreSQL, Daten in /tmp zu speichern, also wird es nicht Daten innerhalb de Volume zu speichern (Sie können ein Volume auf /tmp erstellen, aber das scheint ein bisschen seltsam). Wenn Sie die Umgebungsvariable PGDATA entfernen, speichert Postgres Daten in /var/lib/postgresql/data. Die Verwendung dieser Definition für den Postgres-Service sollte den folgenden Trick liefern:

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