postgresql - dockerized postgres - 锁定文件“postmaster.pid”为空
问题描述
我在使用官方 Postgres docker 镜像时遇到了问题,这在这台机器上从未发生过。我通过 docker-compose 使用它,但是在运行时docker-compose up
,db 容器没有启动,这是错误:
db_1 | 2019-04-19 22:20:27.180 UTC [1] FATAL: lock file "postmaster.pid" is empty
db_1 | 2019-04-19 22:20:27.180 UTC [1] HINT: Either another server is starting, or the lock file is the remnant of a previous server startup crash.
我尝试了几次删除图像,然后将其重新拉出,但仍未解决问题。
我正在使用 Docker for Mac 2.0.0.3 (31259)
这是docker-compose.yml
:
version: '2'
services:
web:
build: .
entrypoint: sh -c "python3 /var/www/my_project/manage.py migrate --noinput &&
python3 /var/www/my_project/manage.py runserver 0.0.0.0:8000"
restart: on-failure
ports:
- "9001:8000"
volumes:
- .:/var/www/my_project
depends_on:
- db
env_file:
- ./.env
environment:
- DB_SERVER=db
- DB_NAME=postgres
- DB_USER=postgres
db:
ports:
- "9432:5432"
image: postgres
volumes:
- database:/var/lib/postgresql
volumes:
database:
对此有什么帮助吗?
解决方案
您可以尝试从容器挂载的卷中手动删除 pid 文件。像这样的东西:
搜索卷:
docker inspect container-name
搜索存储卷的目录:
...
"Mounts": [
{
"Type": "volume",
"Name": "9009b4e54686dc36f797a15fd8fc09213f3e8949583b823525881c010f2fe347",
"Source": "/var/lib/docker/volumes/9009b4e54686dc36f797a15fd8fc09213f3e8949583b823525881c010f2fe347/_data",
现在删除pid文件:
rm /var/lib/docker/volumes/9009b4e54686dc36f797a15fd8fc09213f3e8949583b823525881c010f2fe347/_data/
在此之后,您可能会收到以下错误消息:
lock file "/var/run/postgresql/.s.PGSQL.5432.lock" is empty
这可以通过用包含数字的文件覆盖该文件来解决:
echo 12345 > bla
docker cp bla container-name:/var/run/postgresql/.s.PGSQL.5432.lock
docker restart container-name
推荐阅读
- scala - 在Scala中动态选择类型类
- java - OnActivityResult 在片段内不起作用。我怎样才能在我的代码上解决这个问题?
- c# - 带有实体框架的 SQLite DATETIME(在 Julian/Real/Double 中)列
- python - 如何从 git worktree 命令生成多个文件夹?
- docker - 有没有更有效的方法来码头化 Luarocks?
- ruby-on-rails-6 - Rails::SourceAnnotationExtractor 不是类/模块 (TypeError)
- powershell - 自动将数据输入到 SharePoint 应用程序页面?
- angular - 从 url 获取 id,其中 param 位于路线 Angular 6 的中间
- php - S3 error access when upgrading AWS PHP SDK versions
- phabricator - Arcanist 如何结帐到特定 ID