`docker-compose up`が実行されたときに名前のないボリュームが作成され、` docker-compose down && docker-compose up`を発行した後にこれらが二重に実行されるのはなぜですか?


8

docker composeアプリケーションを起動すると、最初に名前付きボリュームが作成され、起動するたびに追加のボリュームが作成されます。これは増分ボリュームを作成するという点で正常な動作ですか、それともdocker-composeファイルが壊れていますか?さらに、を実行した後docker volume prune、名前のないボリュームのうち2つを削除しました

これは、2回開始した後の出力です。

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

参考までに、私のdocker-composeファイル

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:

再現する手順

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

どのコマンドがどのような順序で発行されたかを示す「再現手順」の段落を追加してください。
030

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

回答:


6

研究では、ことが示された匿名のボリュームがで作成されたinfluxdbgrafana/grafana

匿名ボリュームは、最初にコンテナーにマウントされるときに明示的な名前が付けられないため、Dockerは、特定のDockerホスト内で一意であることが保証されているランダムな名前を付けます。名前の他に、名前付きボリュームと匿名ボリュームは同じように動作します。

結果

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:

結果は:

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

そしてdocker-compose down、その後upに実行されるたびに、匿名ボリュームの数は2倍になります。

influxdbとgrafanaの代わりにnginxがプルされるとどうなりますか?

DRIVER              VOLUME NAME
local               devopsstackexchange_grafana-data
local               devopsstackexchange_influxdb-data

そしてその後docker-compose down && docker-compose up -d

DRIVER              VOLUME NAME
local               devopsstackexchange_grafana-data
local               devopsstackexchange_influxdb-data

特定のイメージが追加の匿名ボリュームを作成したようです。influxdbをnginxに置き換えて、grafanaを使用してみましょう。

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

docker composeが再度実行されるたびに、3つの匿名ボリュームがgrafana/grafanadockerイメージによって作成されました。influxdbをnginxに置き換えて、grafanaをnginxに戻します。

DRIVER              VOLUME NAME
local               devopsstackexchange_grafana-data
local               devopsstackexchange_influxdb-data

再起動しても2のままです。

そのgrafanaが問題を引き起こしているようです。

grafana / grafanaが再起動されるたびに3つの新しい匿名ボリュームが作成されるのはなぜですか?

grafana / grafana dockerfileは、3つの匿名ボリュームが作成されることを示しています。

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

このDockerfileにより、dockerが実行されるイメージが生成され、/ myvolに新しいマウントポイントが作成され、グリーティングファイルが新しく作成されたボリュームにコピーされます。

docker volume inspect <volume name, e.g. 34cfafd4603dbc7e71a83e2520f978c8307b084143b3192de65a1995dc1d2f86> 返されたパスが3つの匿名ボリュームのうち2つがチェックされたときにgrafanaデータを返しました:

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

そして

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


0

他の誰かがこのうさぎの穴を下りている場合。で誤ってボリュームを定義していないことを確認=してくださいDockerfile

違う:

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

正しい:

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

匿名のボリュームが追加された理由を詳しく調べるのに長い時間がかかりました docker-compose

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.