2016-04-30 2 views
1

Um einige Bilder zu aktualisieren, habe ich 'docker-compose pull' verwendet. Dann baue ich: 'docker-compose build'.Docker Compose: Vermeiden Sie die Wiederherstellung von Datencontainern

Ich wollte nur den Anwendungscontainer zu aktualisieren, also entfernte ich es und neu gestartet: 'Docker-komponieren rm App' und 'Docker-komponieren -d-App'.

Aber etwas Unerwünschtes ist passiert. Der Datencontainer wurde ebenfalls neu erstellt. Die alten Daten sind verloren.

Dockerfile für Datacontainer:

FROM gitlab/gitlab-ce:latest 
VOLUME ["/etc/gitlab", "/var/log/gitlab", "/var/opt/gitlab"] 
ENTRYPOINT ["hostname"] 

Docker-compose.yml:

version: '2' 
services: 
gitlab: 
    image: 'gitlab/gitlab-ce:latest' 
    domainname: example.com 
    hostname: gitlab 
    networks: 
    - devenv 
    restart: always 
    environment: 
    GITLAB_OMNIBUS_CONFIG: | 
    external_url 'http://gitlab.example.com' 
    gitlab_rails['gitlab_shell_ssh_port'] = 2224 
    ports: 
    - '80:80' 
    - '2224:22' 
    volumes_from: 
    - gitlabdata 

gitlabdata: 
    build: gitlab-data 

Wie kann ich diese beim nächsten Mal vermeiden?

Antwort

1

Der docker-compose up Befehl hat die --no-recreate Flag. Dieses Flag verhindert, dass Container neu erstellt werden, wenn sie bereits vorhanden sind.

Daher können Sie

docker-compose up -d --no-recreate app 
0

Ihr Problem führen, weil Sie einen Volume für einen Behälter geschaffen, und entfernt dann den Container, das entfernt auch Ihre Bände.

Sie sollten Ihre Volumes so ändern, dass sie mount an ein Host-Verzeichnis binden. Auf diese Weise werden Ihre Dateien auf dem Host gespeichert und Sie können diese Verzeichnisse wieder anhängen, wenn der Container verschwindet. Ein weiterer Vorteil ist der Zugriff auf diese Dateien vom Host aus.

Hier ist ungefähr, wie Ihre Komposition Datei mit der neuen Volume-Konfiguration aussehen würde.

version: '2' 
services: 
    gitlab: 
     image: 'gitlab/gitlab-ce:latest' 
     domainname: example.com 
     hostname: gitlab 
     networks: 
     - devenv 
     restart: always 
     environment: 
     GITLAB_OMNIBUS_CONFIG: | 
     external_url 'http://gitlab.example.com' 
     gitlab_rails['gitlab_shell_ssh_port'] = 2224 
     ports: 
      - '80:80' 
      - '2224:22' 
     volumes_from: 
      - gitlabdata 

    gitlabdata: 
     build: gitlab-data 
     Volumes: 
      - /etc/gitlab:/dir/on/host 
      - /var/log/gitlab:/dir/on/host2 
      - /var/opt/gitlab:/dir/on/host3 

Sie können auf dem Host, was immer Sie wollen, mounten. Weitere Informationen über Volumes hier: https://docs.docker.com/engine/userguide/containers/dockervolumes/#mount-a-host-directory-as-a-data-volume

+0

Ich dachte, Volumen wurden nicht entfernt, es sei denn, Sie übergeben "-v" zu "Docker-compose rm"? – johnharris85

+0

Richtig, ich bin nicht sicher, ob sie das -v oder nicht bestanden haben, da sie nicht in der Frage gesagt haben, aber da die Bände entfernt wurden, nahm ich an, dass sie das getan haben, aber ich hätte es nicht annehmen sollen Danke, dass du das eingefangen hast. –