Postgres Docker:“ postgres:无法访问服务器配置文件” /var/lib/postgresql/data/postgresql.conf“:没有这样的文件或目录”

时间:2020-05-02 11:35:29

标签: postgresql docker

我在使用官方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

1 个答案:

答案 0 :(得分:2)

如果在同一台计算机和同一会话上执行之间的工作方式不一致(又称为不重新启动),则说明目录映射不正确。由于您使用的是Mac,因此很难找到中断的原因。在Mac上,Docker具有通过虚拟机运行的额外好处,因此docker将本地驱动器/路径映射到虚拟机,然后将其映射到容器映像,因此在两个不同的层上可能出错。 / p>

Dario的澄清意见中有正确的主意,您不应该依赖/tmp,因为 也具有Mac Magic。实际上是/var/private/somegarbagestring,每次启动时都不同。尝试切换到/Users/$USER/dbpath文件夹并将数据移动到该文件夹​​,这样至少可以在调试数据和数据库之间少一层魔力。