首页 > 解决方案 > 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:

对此有什么帮助吗?

标签: postgresqldocker

解决方案


您可以尝试从容器挂载的卷中手动删除 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

推荐阅读