尽管有明确的插入和更新行,但不会更新docker中用于时标的/ var / lib / postgresql / data盲安装文件夹数据

问题描述

我们有一个用于时间刻度的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