问题描述
我们有一个用于时间刻度的docker容器,该容器明确使用 volume 盲目安装,如下所示:
timescaledb:
restart: always
image: timescale/timescaledb:latest-pg11
user: root
container_name: timescaledb
logging:
driver: syslog
options:
syslog-address: "tcp://${DOCKER_HOST_IP}:5006"
tag: "{{.Name}}/{{.ID}}"
ports:
- 5432:5432
volumes:
- ./postgresql/postgresql.conf:/etc/postgresql/postgresql.conf
- /mnt/postgresql/data:/var/lib/postgresql/data
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TIMESCALEDB_TELEMETRY=off
- POSTGRES_PASSWORD=*was there but removed*
command: postgres -c 'config_file=/etc/postgresql/postgresql.conf'
depends_on:
- logstash
所以请在这里注意/mnt/postgresql/data:/var/lib/postgresql/data
。
更新一些现有行后,我使用以下方法检查/mnt/postgresql/data
文件夹中主机上的最后修改文件:https://stackoverflow.com/a/7448828/1759063
find $1 -type f -exec stat --format '%Y :%y %n' "{}" \; | sort -nr | cut -d: -f2- | head
而且我还没有找到任何最近的文件更新。那么,时间刻度数据实际上存储在什么地方,为了不丢失docker-compose down
等上的数据,我们应该实际装载什么?
输出是这样的:
find $1 -type f -exec stat --format '%Y :%y %n' "{}" \; | sort -nr | cut -d: -f2- | head
2020-10-12 00:33:25.027351283 +0000 ./data/pg_stat/global.tmp
2020-10-12 00:33:18.714856683 +0000 ./data/pg_stat_tmp/global.stat
2020-10-12 00:33:18.714856683 +0000 ./data/pg_stat_tmp/db_0.stat
2020-10-12 00:33:14.770545499 +0000 ./data/pg_stat_tmp/db_13117.stat
2020-10-12 00:01:09.337593127 +0000 ./data/pg_wal/00000001000000240000002A
2020-10-12 00:01:02.329038233 +0000 ./data/global/pg_control
2020-10-12 00:01:02.061017012 +0000 ./data/pg_logical/replorigin_checkpoint
2020-10-12 00:01:01.724990408 +0000 ./data/base/13117/18130
2020-10-12 00:01:01.436967605 +0000 ./data/pg_xact/0018
2020-10-11 23:59:16.664673521 +0000 ./data/pg_stat_tmp/pgss_query_texts.stat
今天是
date
Wed Oct 21 17:54:06 UTC 2020
那么文件夹在容器中存储更新数据的实际位置是什么?
最有趣的部分是根据从容器内以及在同一文件夹中的主机(即,映射为 volumes 盲目装载)的方式观察到的最新更新文件
从容器中,查看映射的文件夹:
find $1 -type f -exec stat -c '%Y :%y %n' "{}" \; | sort -nr | cut -d: -f2- | head
2020-10-21 19:08:46.000000000 ./data/pg_stat_tmp/global.stat
2020-10-21 19:08:46.000000000 ./data/pg_stat_tmp/db_13117.stat
2020-10-21 19:08:46.000000000 ./data/pg_stat_tmp/db_0.stat
2020-10-21 12:51:21.000000000 ./data/pg_stat_tmp/pgss_query_texts.stat
2020-10-21 10:36:06.000000000 ./data/pg_wal/00000001000000080000001A
2020-10-21 10:36:00.000000000 ./data/pg_xact/0002
2020-10-21 10:36:00.000000000 ./data/pg_logical/replorigin_checkpoint
2020-10-21 10:36:00.000000000 ./data/global/pg_control
2020-10-21 10:36:00.000000000 ./data/base/13117/16539
2020-10-13 18:22:56.000000000 ./data/base/13117/50258
主机上的同一文件夹:
:/mnt/postgresql/data# find $1 -type f -exec stat -c '%Y :%y %n' "{}" \; | sort -nr | cut -d: -f2- | head
2020-10-12 00:33:25.027351283 +0000 ./pg_stat/global.tmp
2020-10-12 00:33:18.714856683 +0000 ./pg_stat_tmp/global.stat
2020-10-12 00:33:18.714856683 +0000 ./pg_stat_tmp/db_0.stat
2020-10-12 00:33:14.770545499 +0000 ./pg_stat_tmp/db_13117.stat
2020-10-12 00:01:09.337593127 +0000 ./pg_wal/00000001000000240000002A
2020-10-12 00:01:02.329038233 +0000 ./global/pg_control
2020-10-12 00:01:02.061017012 +0000 ./pg_logical/replorigin_checkpoint
2020-10-12 00:01:01.724990408 +0000 ./base/13117/18130
2020-10-12 00:01:01.436967605 +0000 ./pg_xact/0018
2020-10-11 23:59:16.664673521 +0000 ./pg_stat_tmp/pgss_query_texts.stat
在尝试访问文件时,该文件根据2020-10-21 19:08:46.000000000
上的docker容器进行了更改,但根据主机,它仅在大约一周前进行了更改:
:/mnt/postgresql/data# ls -l pg_stat_tmp/global.stat
-rw------- 1 70 70 607 Oct 12 00:33 pg_stat_tmp/global.stat
卷盲目安装文件夹可以在容器视图和主机视图中包含不同的文件吗?
这里唯一不寻常的是,在同一个Docker上,我们有另一个容器运行的不是盲目装载,而是运行与盲目装载相同的目的地的卷:
"Type": "volume",> "Name": "9a241364bdb2c9f1f1ac5ce30effeca15d1c7477f7b99eec42acf40bee5e8ba2",> "Source": "/var/lib/docker/volumes/9a241364bdb2c9f1f1ac5ce30effeca15d1c7477f7b99eec42acf40bee5e8ba2/_data",> "Destination": "/var/lib/postgresql/data",> "Driver": "local",> "Mode": "",> "RW": true,> "Propagation": ""
> }
解决方法
您可以获得有关连接的卷位置的信息
$ docker inspect <container_name>
从输出中,您可以获得"Source"
。
参考文件夹包含来自相应容器的位置/var/log
的文件
$ ls -lah /var/lib/docker/volumes/b2.....1a/_data