我在使用官方 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
Run Code Online (Sandbox Code Playgroud)
我正在使用以下命令启动 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
Run Code Online (Sandbox Code Playgroud)
我将变量保存在.env文件中,它们看起来像这样:
POSTGRES_USER=custom-db
POSTGRES_DB=custom-db
POSTGRES_PASSWORD=12345678
POSTGRES_PORT=5432
POSTGRES_DEVELOPMENT_DATA=/tmp/custom-db-pgdata
Run Code Online (Sandbox Code Playgroud)
当我尝试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
Run Code Online (Sandbox Code Playgroud)
小智 3
如果在同一台计算机和同一会话(也称为不重新启动)上的执行之间工作方式不一致,则某些内容无法正确映射您的目录。找出问题所在会很困难,尤其是在 Mac 上。Mac 上的 Docker 具有通过虚拟机运行的额外好处,因此 docker 将本地驱动器/路径映射到虚拟机,然后将其映射到容器映像中,因此有两个不同的层可能会出现问题。
达里奥(Dario)在他的澄清评论中有正确的想法,你不应该依赖它,/tmp因为这也有Mac Magic。实际上/var/private/somegarbagestring,每次启动都是不同的。尝试切换到一个/Users/$USER/dbpath文件夹并将数据移至该文件夹,这样至少您可以在数据和数据库之间少一层魔法进行调试。
| 归档时间: |
|
| 查看次数: |
2022 次 |
| 最近记录: |