postgres:9.5
我尝试重新启动,
docker-compose build --no-cache
删除镜像和容器并重新构建
我有很多项目,任何人都开始,保持相同的配置...... Mac osx 塞拉利昂
显然容器没有被很好地删除,我尝试了这个,重建后工作正常。
# 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`
您可以执行
docker volume prune
删除所有未使用的本地卷。
如果您从 Google 来到这里,发现多个容器抱怨磁盘空间不足,则问题可能是您的本地 Docker 安装已超出其磁盘映像大小。这可以在 Mac 版 Docker 中进行配置。 以下是更改磁盘映像大小的说明。
如果你没有任何关键数据,你可以炸掉docker卷。
docker volume ls
docker volume rm your_volume
如果您在 Docker for Mac 开发环境中遇到有关单个或多个容器的磁盘空间问题,您可以考虑两种可能的解决方案。
首先,该问题可能与本地 Docker 安装的磁盘映像大小限制有关。清理一些未使用的图像可能会解决问题。
$ docker volume prune
此命令通过删除不再使用的卷来释放磁盘空间。
如果此方法不起作用,请尝试更改 Mac 版 Docker - 磁盘映像大小 设置。
如果卷修剪不能解决问题,修改设置应被视为最后的手段。这种方法可确保您有效地优化磁盘空间,而无需对 Docker for Mac 的配置进行不必要的更改。
后来,我在 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 文档以执行这些步骤
在我重建容器并通过
docker compose up
启动这些容器后,我在 Mac 版 Docker Desktop 上遇到了这个问题。但这些容器的旧版本已经在运行,因为它们被设置为自动重新启动。
即PostgreSQL 数据库无法在指定卷上设置锁定,因为与正在运行的容器存在并发访问。
令人惊讶的是,这里没有人告诉
docker system df -v
来查看哪个图像占用了太多空间。然后您就知道要删除哪些,可以使用 docker rmi <image>:<tag>
来完成。