docker volume prune
之后,它删除了两个未命名的卷。两次启动后,输出如下:
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
#1 楼
研究表明,匿名卷是由influxdb
和grafana/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
时,匿名卷的数量都会增加一倍。如果将nginx提取,将会发生什么情况而不是influxdb和grafana?
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
它看起来像是某些图像创建了其他匿名卷。让我们用nginx代替influxdb并使用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时,
grafana/grafana
docker镜像都会创建三个匿名卷。让我们用nginx替换influxdb并将grafana还原为nginx:DRIVER VOLUME NAME
local devopsstackexchange_grafana-data
local devopsstackexchange_influxdb-data
如果重新启动,它仍然是两个。
看起来grafana是导致问题的原因。
为什么每次重新启动grafana / grafana时都会创建三个新的匿名卷?
grafana / grafana dockerfile指示将创建三个匿名卷:
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>
返回grafana数据:sudo ls /var/lib/docker/volumes/a0ecd00df8fc68ef36e777c7bf9ec5a496ee30e313b86889487501a53fa2e28e/_data
grafana.ini ldap.toml
和
sudo ls /var/lib/docker/volumes/34cfafd4603dbc7e71a83e2520f978c8307b084143b3192de65a1995dc1d2f86/_data
grafana.db plugins
#2 楼
使用Dockerfile
指令检查在VOLUME
中定义的卷。如果您不希望自动创建带有随机名称的卷,则可以提供一个主机路径,以将其绑定安装到该卷,检查
-v
或--mount
选项,https://docs.docker.com/engine/admin/volumes/volumes/#choose-the--v-or-mount-flag 例如:
-v /srv/lib/grafana:/var/lib/grafana
#3 楼
如果还有其他人要去这个兔子洞。确保您没有在=
中用Dockerfile
意外定义音量错误:
VOLUME = ["/logs", "/data"]
正确:
VOLUME ["/logs", "/data"]
我花了很长时间来研究为什么
docker-compose
添加了匿名卷
评论
请添加“重现步骤”段落,该段落指示发出了哪些命令以及发出的命令顺序。docker-compose up -d && docker-compose down && docker-compose up -d && docker-compose down && docker-compose up -d && docker-compose down