postgresql - 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 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
解决方案
我想到了。根本原因是使用tmpfs
.
使用tmpfs
Postgres 数据目录可以大大加快测试速度。但是,它的基本大小为 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
推荐阅读
- python - 为什么我收到的是 post 请求而不是 get 请求?
- ignite-ui-angular - 无法从 IgniteUI / igniteui-angular 网格获取排序事件
- react-native - 密码错误总是真实的 react-hook-form
- swiftui - 制作具有清晰背景的 SwiftUI 视图?
- installation - Miniconda 安装问题
- flutter - 使用行和列创建自定义网格视图
- java - 内部类的替代方案,在外部类内部实例化
- c# - 如何管理使用任意调用参数注册的方法列表作为委托,通过另一个调用方法调用它们?
- assembly - 如何用汇编语言在每个屏幕/页面上打印某些行?
- arrays - 如何使用伪代码开发线性搜索和二分搜索算法。?