首页 > 解决方案 > Docker Desktop Mac:设备上没有剩余空间,Postgres

问题描述

我知道关于这个话题有很多类似的问题。到目前为止没有任何帮助。

最近我在我的 Node 项目中添加了一个新的迁移文件,它导致 Docker 在集成测试期间出现以下错误

- could not create file "base/12379/270766": No space left on device

具体来说,尝试将 UNIQUE 约束添加到两列时似乎出错了。

这是我的撰写文件:

version: '2.1'
services:
  web:
    build: .
    container_name: web_1
    env_file:
      - ./local.env
    environment:
      NODE_ENV: development
      ECHO_SQL: ${ECHO_SQL}
    ports:
      - "4000:4000"

这是测试撰写文件:

version: '2.1'
services:
  web:
    env_file:
      - ./local.env
    environment:
      NODE_ENV: test
      NO_SERVER: 1
      XUNIT_FILE: output/xunit.xml
    volumes:
      - ./output:/opt/app/output
    links:
      - "pg"
  pg:
    image: postgres:9.5
    command: postgres -c logging_collector=off -c log_min_error_statement=error -c fsync=off -c full_page_writes=off -c synchronous_commit=off -c archive_mode=off
    tmpfs:
      - /var/lib/postgresql/data:rw
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: mysecretpassword

我运行测试

$ docker-compose -f docker-compose.yml -f docker-compose-test.yml build
$ docker-compose -f docker-compose.yml -f docker-compose-test.yml run web bash -c "./tools/wait-for-pg.sh; grunt"

我尝试过的事情:

磁盘空间

其他答案提到实际驱动器上的空间不足。我的机器上还有很多空间。

可用硬盘空间

增加磁盘大小

将“磁盘映像大小”从 64G 增加到 128G

Docker 桌面首选项

然后我重新启动了docker桌面。没有效果。

重新开始

以防万一,我在磁盘映像大小更改后重新启动了笔记本电脑。没有效果

修剪

docker system prune --all

仍然得到同样的错误。

删除 Docker 虚拟机文件

rm ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw

然后重新启动 Docker 桌面。仍然得到同样的错误。

storage_opt

我尝试storage_opt在 pg 服务下添加到我的 docker compose 文件中。

  pg:
    image: postgres:9.5
    command: postgres -c logging_collector=off -c log_min_error_statement=error -c fsync=off -c full_page_writes=off -c synchronous_commit=off -c archive_mode=off
    tmpfs:
      - /var/lib/postgresql/data:rw
    ports:
      - "5432:5432"
    storage_opt:
      size: '1G'
    environment:
      POSTGRES_PASSWORD: mysecretpassword

docker-compose 给了我这个错误:

services.pg Additional property storage_opt is not allowed

不知道这里发生了什么。我阅读了规范:https ://docs.docker.com/compose/compose-file/compose-file-v2/#storage_opt

标签: postgresqlmacosdockerdocker-compose

解决方案


我想到了。根本原因是使用tmpfs.

使用tmpfsPostgres 数据目录可以大大加快测试速度。但是,它的基本大小为 200mb,不会被任何其他问题中列出的任何设置更改。

增加tmpfs变化的大小

  pg:
    image: postgres:9.5
    command: postgres -c logging_collector=off -c log_min_error_statement=error -c fsync=off -c full_page_writes=off -c synchronous_commit=off -c archive_mode=off
    tmpfs:
      - /var/lib/postgresql/data:rw
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: mysecretpassword

  pg:
    image: postgres:9.5
    command: postgres -c logging_collector=off -c log_min_error_statement=error -c fsync=off -c full_page_writes=off -c synchronous_commit=off -c archive_mode=off -c log_temp_files=10240
    volumes:
      - type: tmpfs
        target: /var/lib/postgresql/data:rw
        tmpfs:
          size: 4294967296
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: mysecretpassword

推荐阅读