/var/lib/postgresql/data 尽管有明确的插入和更新行,但 docker 中时间刻度的盲挂载文件夹数据不会更新
Posted
技术标签:
【中文标题】/var/lib/postgresql/data 尽管有明确的插入和更新行,但 docker 中时间刻度的盲挂载文件夹数据不会更新【英文标题】:/var/lib/postgresql/data blind mount folder data for timescale in docker are not updated despite of explicit insert and update rows to it 【发布时间】:2021-02-04 16:38:56 【问题描述】:我们有一个用于时间刻度的 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://***.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
那么在容器中存储更新数据的文件夹的实际位置是什么?
最有趣的部分是最后更新的文件是根据从容器内和主机在同一文件夹中的观察方式(即映射为 volume 盲挂载)
从容器中,查看映射的文件夹:
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
volume 盲挂载文件夹能否包含容器视图和主机视图中的不同文件?
这里唯一不寻常的是,在同一个 docker 上,我们运行的不是盲挂载的另一个容器,而是具有相同目标的卷,就像我们在盲挂载中一样:
"Type": "volume",
> "Name": "9a241364bdb2c9f1f1ac5ce30effeca15d1c7477f7b99eec42acf40bee5e8ba2",
> "Source": "/var/lib/docker/volumes/9a241364bdb2c9f1f1ac5ce30effeca15d1c7477f7b99eec42acf40bee5e8ba2/_data",
> "Destination": "/var/lib/postgresql/data",
> "Driver": "local",
> "Mode": "",
> "RW": true,
> "Propagation": ""
>
【问题讨论】:
基本上,您的安装说明似乎没问题。当您不指定附加功能时,它是否有效?即不要传递postgresql.conf
,不要覆盖CMD,..也许你也可以在你的文件列表之前显示pwd
。
好的,让我检查一下。看起来主机位置是hdfs挂载,所以主机挂载它们可能比启动docker晚吗?现在尝试检查这个想法
【参考方案1】:
您可以获取有关已连接卷位置的信息
$ docker inspect <container_name>
从输出中,您可以获得"Source"
。
参考文件夹包含来自相应容器的位置 /var/log
的文件
$ ls -lah /var/lib/docker/volumes/b2.....1a/_data
【讨论】:
没错。所以对我来说不清楚,为什么挂载文件夹中的文件没有更新。就像实际上数据库写入一些内部 docker 文件位置并更新它们,而不是卷中的文件。这里的问题是 timescale db docker 容器中的替代位置是什么?以上是关于/var/lib/postgresql/data 尽管有明确的插入和更新行,但 docker 中时间刻度的盲挂载文件夹数据不会更新的主要内容,如果未能解决你的问题,请参考以下文章