Warum werden unbenannte Volumes erstellt, wenn "Docker-Compose Up" ausgeführt wird, und verdoppeln diese nach der Ausgabe von "Docker-Compose Down" und "Docker-Compose Up"?


8

Beim Starten einer Docker-Compose-Anwendung werden beim ersten Start benannte Volumes und bei jedem Start zusätzliche Volumes erstellt. Ist dies das normale Verhalten, da inkrementelle Volumes erstellt werden, oder ist meine Docker-Compose-Datei fehlerhaft? Außerdem wurden nach dem Ausführen docker volume prunezwei der unbenannten Volumes entfernt

Dies ist die Ausgabe nach zweimaligem Starten:

DRIVER              VOLUME NAME
local               2b33c81e6e955ff36061f4120b7181c7efc7aebded2f87eaa7290027f1e7a725
local               74301eadc75018d6f7da76aec44bcf743e03261492cfcc33211941684a570030
local               c42b1e2c17342c52b4b9e90f4d4b7fa24ccb30de5479e65cf4366e2373dfb0bf
local               dcfa63dbf99362fc92fe3b981f50abebfe1bba03063d4dd9dd790f4c058817cf
local               dockerinfluxdbgrafana_grafana-data
local               dockerinfluxdbgrafana_influxdb-data

Und als Referenz meine Docker-Compose-Datei

version: "3"
services:
  influxdb:
    image: influxdb:latest
    container_name: influxdb
    ports:
      - "8086:8086"
    env_file:
      - 'env.influxdb'
    networks:
      - backend
    volumes:
      - influxdb-data:/var/lib/influxdb

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    env_file:
      - 'env.grafana'
      - 'secrets.grafana'
    networks:
      - backend
    volumes:
      - grafana-data:/var/lib/grafana

networks:
  backend:

volumes:
  influxdb-data:
  grafana-data:

Schritte zum Reproduzieren

docker-compose up -d && docker-compose down && docker-compose up -d && docker-compose down && docker-compose up -d && docker-compose down

Bitte fügen Sie einen Absatz "Schritte zum Reproduzieren" hinzu, der angibt, welche Befehle und in welcher Reihenfolge diese ausgegeben wurden.
030

docker-compose up -d && docker-compose down && docker-compose up -d && docker-compose down && docker-compose up -d && docker-compose down
Moritz

Antworten:


6

Untersuchungen haben ergeben, dass die anonymen Bände von influxdbund erstellt wurden grafana/grafana.

Anonyme Volumes erhalten keinen expliziten Namen, wenn sie zum ersten Mal in einen Container eingebunden werden. Docker gibt ihnen daher einen zufälligen Namen, der innerhalb eines bestimmten Docker-Hosts garantiert eindeutig ist. Neben dem Namen verhalten sich benannte und anonyme Volumes gleich.

Ergebnisse

version: "3"
services:
  influxdb:
    image: influxdb:latest
    container_name: influxdb
    ports:
      - "8086:8086"
    #env_file:
    #  - 'env.influxdb'
    networks:
      - backend
    volumes:
      - influxdb-data:/var/lib/influxdb

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    #env_file:
    #  - 'env.grafana'
    #  - 'secrets.grafana'
    networks:
      - backend
    volumes:
      - grafana-data:/var/lib/grafana

networks:
  backend:

volumes:
  influxdb-data:
  grafana-data:

Ergebnisse in:

DRIVER              VOLUME NAME
local               604a07040367512b09c618c6dcc71a7f55390c9c23de6ab08be7466414ed62da
local               7f4b630073b31b6e772d3edef6da81b48643525edfc34281ea13fbd6b86ec270
local               devopsstackexchange_grafana-data
local               devopsstackexchange_influxdb-data

und jedes Mal, wenn docker-compose downund in der Folge ausgeführt upwird, verdoppelt sich die Anzahl anonymer Volumes.

Was passiert, wenn Nginx anstelle von Influxdb und Grafana gezogen wird?

DRIVER              VOLUME NAME
local               devopsstackexchange_grafana-data
local               devopsstackexchange_influxdb-data

und danach docker-compose down && docker-compose up -d?

DRIVER              VOLUME NAME
local               devopsstackexchange_grafana-data
local               devopsstackexchange_influxdb-data

Es sieht so aus, als hätten bestimmte Bilder die zusätzlichen anonymen Volumes erstellt. Ersetzen wir influxdb durch nginx und verwenden grafana.

DRIVER              VOLUME NAME
local               15b80416ab06abb629d9f634a0feff08f7c560f31d614b9b430855c16cdb75c7
local               205a6f19cbf992c95b2e3be9f2fb1ca9ecec35fce550d0b7a4b9f32b0ef163b1
local               474108f5b7b14fba92a3e5a980f3bf851388b2ee25d7417df5c42d9f176e084b
local               5830a31a470ec8a42ddae7a37bb50487f3f36360318b2f9f5301b338507782b4
local               9f00868a2fec0cfc0d34dc12d0879d39487a13128863722f400ad4c47df2d340
local               devopsstackexchange_grafana-data
local               devopsstackexchange_influxdb-data
local               f47b1b7bbec8e50b32a7c39704c7c218165b284298d852313fa24bc7cbe6acc5

Jedes Mal, wenn Docker Compose erneut ausgeführt wurde, wurden vom grafana/grafanaDocker-Image drei anonyme Volumes erstellt . Ersetzen wir influxdb durch nginx und setzen die grafana auf nginx zurück:

DRIVER              VOLUME NAME
local               devopsstackexchange_grafana-data
local               devopsstackexchange_influxdb-data

und es bleiben zwei, wenn neu gestartet.

Es sieht so aus, als würde Grafana das Problem verursachen.

Warum werden bei jedem Neustart von grafana / grafana drei neue anonyme Volumes erstellt?

Die Docking-Datei grafana / grafana gibt an, dass drei anonyme Volumes erstellt werden:

VOLUME ["/var/lib/grafana", "/var/log/grafana", "/etc/grafana"]

https://docs.docker.com/engine/reference/builder/#volume

FROM ubuntu
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greeting
VOLUME /myvol

Diese Docker-Datei führt zu einem Image, das dazu führt, dass Docker ausgeführt wird, um einen neuen Mount-Punkt bei / myvol zu erstellen und die Begrüßungsdatei auf das neu erstellte Volume zu kopieren.

docker volume inspect <volume name, e.g. 34cfafd4603dbc7e71a83e2520f978c8307b084143b3192de65a1995dc1d2f86> gab grafana-Daten zurück, als der zurückgegebene Pfad von zwei von drei anonymen Volumes überprüft wurde:

sudo ls /var/lib/docker/volumes/a0ecd00df8fc68ef36e777c7bf9ec5a496ee30e313b86889487501a53fa2e28e/_data
grafana.ini  ldap.toml

und

sudo ls /var/lib/docker/volumes/34cfafd4603dbc7e71a83e2520f978c8307b084143b3192de65a1995dc1d2f86/_data
grafana.db  plugins


0

Wenn jemand anderes dieses Kaninchenloch hinuntergeht. Stellen Sie sicher, dass Sie Ihre Lautstärke nicht versehentlich mit einem =in Ihrem definiert habenDockerfile

Falsch:

VOLUME = ["/logs", "/data"]

Richtig:

VOLUME ["/logs", "/data"]

Ich habe lange gebraucht, um herauszufinden, warum die anonymen Bände von hinzugefügt wurden docker-compose

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.