我在使用官方postgres docker镜像时遇到了奇怪的问题。在大多数情况下,它工作正常,如果我关闭容器并再次启动它,有时会出现此错误,但并非每次都这样:
PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres: could not access the server configuration file "/var/lib/postgresql/data/postgresql.conf": No such file or directory
我正在使用以下命令启动postgres图像:
export $(grep -v '^#' .env | xargs) && docker run --rm --name postgres \
-e POSTGRES_USER=$POSTGRES_USER \
-e POSTGRES_DB=$POSTGRES_DB \
-e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \
-p $POSTGRES_PORT:$POSTGRES_PORT \
-v $POSTGRES_DEVELOPMENT_DATA:/var/lib/postgresql/data \
postgres
我将变量保存在.env
文件中,它们看起来像这样:
POSTGRES_USER=custom-db
POSTGRES_DB=custom-db
POSTGRES_PASSWORD=12345678
POSTGRES_PORT=5432
POSTGRES_DEVELOPMENT_DATA=/tmp/custom-db-pgdata
当我尝试echo
变量时,值就在那里了,所以我不认为我会将空值传递给docker env变量。
主机上的目录如下:
/tmp/custom-db-pgdata
├── base
│ ├── 1
│ ├── 13407
│ ├── 13408
│ └── 16384
├── global
├── pg_logical
├── pg_multixact
│ ├── members
│ └── offsets
├── pg_notify
├── pg_stat
├── pg_stat_tmp
├── pg_subtrans
├── pg_wal
│ └── archive_status
└── pg_xact
答案 0 :(得分:2)
如果在同一台计算机和同一会话上执行之间的工作方式不一致(又称为不重新启动),则说明目录映射不正确。由于您使用的是Mac,因此很难找到中断的原因。在Mac上,Docker具有通过虚拟机运行的额外好处,因此docker将本地驱动器/路径映射到虚拟机,然后将其映射到容器映像,因此在两个不同的层上可能出错。 / p>
Dario的澄清意见中有正确的主意,您不应该依赖/tmp
,因为 也具有Mac Magic。实际上是/var/private/somegarbagestring
,每次启动时都不同。尝试切换到/Users/$USER/dbpath
文件夹并将数据移动到该文件夹,这样至少可以在调试数据和数据库之间少一层魔力。