Docker 致命:无法写入锁定文件“postmaster.pid”:设备上没有剩余空间

问题描述 投票:0回答:8

postgres:9.5

我尝试重新启动,

docker-compose build --no-cache

删除镜像和容器并重新构建

我有很多项目,任何人都开始,保持相同的配置...... Mac osx 塞拉利昂

docker version

see the error


显然容器没有被很好地删除,我尝试了这个,重建后工作正常。

# Delete all containers
docker rm $(docker ps -a -q)
# Delete all images
docker rmi $(docker images -q)

docker-compose.yml

version: '2'
services:
  web:
    build: .
    image: imagename
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "3000:3000"
      - "8000:8000"
    volumes:
      - .:/code
    depends_on:
      - migration
      - redis
      - db
  redis:
    image: redis:3.2.3
  db:
    image: postgres:9.5
    volumes:
      - .:/tmp/data/
  npm:
    image: imagename
    command: npm install
    volumes:
      - .:/code
  migration:
    image: imagename
    command: python manage.py migrate --noinput
    volumes:
      - .:/code
    depends_on:
      - db

Dockerfile:

FROM python:3.5.2
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

RUN mkdir /code
WORKDIR /code

RUN easy_install -U pip

ADD requirements.txt /code/requirements.txt
RUN pip install -r requirements.txt`
macos postgresql docker macos-sierra postgresql-9.5
8个回答
32
投票

您可以执行

docker volume prune
删除所有未使用的本地卷。


27
投票

如果您从 Google 来到这里,发现多个容器抱怨磁盘空间不足,则问题可能是您的本地 Docker 安装已超出其磁盘映像大小。这可以在 Mac 版 Docker 中进行配置。 以下是更改磁盘映像大小的说明


24
投票

我的情况,转到 docker Dashboard -> 设置并创建

Disk Image size
然后重新启动

enter image description here


19
投票

如果你没有任何关键数据,你可以炸掉docker卷。

docker volume ls

docker volume rm your_volume


4
投票

如果您在 Docker for Mac 开发环境中遇到有关单个或多个容器的磁盘空间问题,您可以考虑两种可能的解决方案。

首先,该问题可能与本地 Docker 安装的磁盘映像大小限制有关。清理一些未使用的图像可能会解决问题。

$ docker volume prune

此命令通过删除不再使用的卷来释放磁盘空间。

如果此方法不起作用,请尝试更改 Mac 版 Docker - 磁盘映像大小 设置。

如果卷修剪不能解决问题,

修改设置应被视为最后的手段。这种方法可确保您有效地优化磁盘空间,而无需对 Docker for Mac 的配置进行不必要的更改。


1
投票

后来,我在 postgres 和 mysql 数据库中遇到了类似的问题。突然间,这些容器在没有任何外部触发的情况下退出了。我花了很多时间在这个问题上,最终确定是服务器中的 RAM 分配问题。

有 13 个容器在同一路径中工作,其中还存在 3 个 postgres 和 1 个 mysql 数据库容器。这些容器退出并且应用程序停止工作。 docker 日志中有 2 个错误 - 主要是

postgresql database directory appears to contain a database
FATAL: could not write lock file "postmaster.pid": No space left on device

我尝试停止所有其他服务并仅启动数据库容器,但此问题重复出现

首先使用以下命令检查存储利用率状态

df [OPTION]... [FILE]...
df -hP

就我而言,它显示利用率为 98%,并且数据库无法添加新记录,从而导致了问题。为 NFS 挂载分配额外内存后,问题解决了

完成后,验证 RAM 利用率状态,现在将增加

free -h

这将返回总计、已用、空闲、共享、buff/缓存、可用的值。如果您尝试一一停止容器并重新启动,您可以看到这些容器正在消耗共享类别的内存。因此,就我而言,最初显示的共享数据量接近 18M,这不足以让数据库与所有其他容器一起运行。增加 NFS 挂载后,共享 RAM 也增加到 50M,这意味着所有服务都可以正常工作

因此,这是纯粹的物理存储空间问题,您应该主动删除旧的未使用文件、占用巨大空间的 docker 映像、本地 docker 卷等。查看 docker 文档以执行这些步骤

https://docs.docker.com/config/pruning/


0
投票

在我重建容器并通过

docker compose up
启动这些容器后,我在 Mac 版 Docker Desktop 上遇到了这个问题。但这些容器的旧版本已经在运行,因为它们被设置为自动重新启动。

即PostgreSQL 数据库无法在指定卷上设置锁定,因为与正在运行的容器存在并发访问。


0
投票

令人惊讶的是,这里没有人告诉

docker system df -v
来查看哪个图像占用了太多空间。然后您就知道要删除哪些,可以使用
docker rmi <image>:<tag>
来完成。

© www.soinside.com 2019 - 2024. All rights reserved.