postgresql - 欺骗 Docker 中可用的可用空间或欺骗 Postgres 和 RabbitMQ
问题描述
我正在使用 Google Cloud Run 来托管一些解决方案。当容器启动时,程序可以写入磁盘,并且数据会一直持续到容器停止。但是,从系统的角度来看,容器的所有分区总是报告零可用空间。我从几个方面证实了这一点:
- 容器启动时
df
从运行显示零可用空间start.sh
- 删除一个大文件然后运行仍然
df
显示start.sh
零可用空间 - 可以通过 PHP 脚本等写入磁盘
start.sh
,因此系统确实有可用空间写入内存,但df
仍报告零可用空间
(以上所有内容都是在容器部署到 Cloud Run 后。通过 Cloud Shell 中的 docker 手动运行相同的容器并执行df
报告可用空间)。
问题是某些应用程序在启动时会执行磁盘空间检查,并且无法在 Google Cloud Run 中加载。例如,MariaDBdf
在其init script中使用,因此注释掉这些行可以将静态但功能性的 MariaDB 实例添加到 Cloud Run 容器。
MariaDB 让它变得简单。现在,我正在尝试对 PostgreSQL 和 RabbitMQ 做同样的事情,但我无法弄清楚如何覆盖他们的磁盘空间检查。以下是我正在考虑的两个选项:
- 继续挖掘 PostgreSQL 和 RabbitMQ 的源代码,直到我找到磁盘空间检查并覆盖它。我不会说 Erlang,所以这很痛苦,我必须为每个有此问题的应用程序都这样做
- 程序可能正在使用 coreutils 来确定磁盘大小。我可以编辑源代码并将其重建为我的 Dockerfile 例程的一部分,以便系统始终返回可用空间(可能有无意的副作用)
是否有人熟悉 Postgres 或 RabbitMQ 的来源,或者有一个我可以实施的系统范围的解决方案来“欺骗”可用的可用空间?
编辑:这是 RabbitMQ 和 PostgreSQL 给出的错误消息
兔子MQ:
{error,{cannot_log_to_file,"/var/log/rabbitmq/rabbit@localhost.log",{error,einval}}}
Postgres:
Error: /usr/lib/postgresql/10/bin/pg_ctl /usr/lib/postgresql/10/bin/pg_ctl start -D /var/lib/postgresql/10/main -l /var/log/postgresql/postgresql-10-main.log -s -o -c config_file="/etc/postgresql/10/main/postgresql.conf" exited with status 1:
解决方案
推荐阅读
- python - Python-requests 发送证书
- c# - Xamarin.Forms - 从另一个文件将约会添加到同步融合计划
- redis - 在 Redis 中按位置获取值
- javascript - 如何使用 JavaScript 从 Firebase 时间戳中仅检索月份
- r - 一种比嵌套 for 循环更简化的方法来填充 R 中的数组
- kotlin - LiveData 转换为 StateFlow / SharedFlow
- python - Python网页抓取,请求对象挂起
- tabulator - 如何计算制表符中列的值
- javascript - 在按键时遇到麻烦以另一种方式面对我的猫
- ruby - 在 ruby on rails 中计算并显示从下到上的余额