从空白目录创建一个新的子目录pg1_data
,并将其安装为运行Docker的official postgres
映像(version 12,Dockerfile here)的新容器的数据目录。
user@XXX:~$ ls #(directory is empty)
user@XXX:~$ mkdir pg1_data
user@XXX:~$ docker run --rm -p 55555:5432 --name pg1 --mount 'type=bind,src='/home/user/pg1_data,dst='/var/lib/postgresql/data' postgres
容器成功旋转,数据库系统接受连接,ls pg1_data
显示已生成postgresql数据目录结构。
然后,假设我执行docker stop pg1
,并使用全新的目录和容器重复第一步。
user@XXX:~$ mkdir pg2_data
user@XXX:~$ docker run --rm -p 55777:5432 --name pg2 --mount 'type=bind,src='/home/user/pg2_data,dst='/var/lib/postgresql/data' postgres
这也像以前一样工作,但是我看到以下输出:
2019-12-11 04:10:18.441 UTC [1] LOG: starting PostgreSQL 12.1 (Debian 12.1-1.pgdg100+1) on x86_64-pc-linux-gnu,compiled by gcc (Debian 8.3.0-6) 8.3.0,64-bit
2019-12-11 04:10:18.442 UTC [1] LOG: listening on IPv4 address "0.0.0.0",port 5432
2019-12-11 04:10:18.442 UTC [1] LOG: listening on IPv6 address "::",port 5432
2019-12-11 04:10:18.446 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2019-12-11 04:10:18.469 UTC [54] LOG: database system was shut down at 2019-12-11 04:10:18 UTC
2019-12-11 04:10:18.476 UTC [1] LOG: database system is ready to accept connections
我很困惑,为什么这个新容器中的postgres可以访问旧容器中的postgres历史,并显示消息“数据库系统在...处关闭...”,它们是{{1 }}映像,装入两个单独的空白数据目录。这两个容器和postgres实例之间有什么关系?我是否从根本上误解了PostgreSQL和/或Docker的工作方式?