欺骗可用的Docker空间或欺骗Postgres和RabbitMQ

时间:2020-09-11 14:54:23

标签: postgresql docker rabbitmq mariadb google-cloud-run

我正在使用Google Cloud Run托管一些解决方案。当容器启动时,程序可以写入磁盘,并且数据将一直保留到容器停止。但是,从系统角度来看,容器的所有分区始终报告零可用空间。我以几种方式确认了这一点:

  • cityAndState.Add((item.city, item.stateabbr)); 开始运行df会在容器启动时显示零可用空间
  • 删除大文件然后从start.sh运行df仍显示零可用空间
  • 可以通过start.sh,PHP脚本等向磁盘进行写操作,因此系统确实具有可写入内存的可用空间,但是start.sh仍然报告零可用空间

(以上所有操作均已将容器部署到Cloud Run。通过Docker从Cloud Shell手动运行同一容器并执行df报告可用空间)。

问题在于某些应用程序在启动时会执行磁盘空间检查,并且无法加载到Google Cloud Run中。例如,MariaDB在其init script中使用df,因此注释掉这些行使得可以向Cloud Run容器添加静态但功能正常的MariaDB实例。

MariaDB使这变得容易。现在,我正在尝试对PostgreSQL和RabbitMQ做同样的事情,但是在弄清楚如何覆盖它们的磁盘空间检查时遇到了麻烦。这是我正在考虑的两个选项:

  • 继续挖掘PostgreSQL和RabbitMQ的源代码,直到找到磁盘空间检查并覆盖它。我不会说Erlang,所以这很痛苦,对于每个有此问题的应用程序,我都必须这样做
  • 程序可能正在使用coreutils来确定磁盘大小。我可以编辑source并将其重建为Dockerfile例程的一部分,以便系统始终以可用空间返回(可能会有意外的副作用)

是否有人熟悉Postgres或RabbitMQ的源代码,或者有一个我可以实施的系统范围的解决方案来“欺骗”可用的可用空间?

编辑:这是RabbitMQ和PostgreSQL给出的错误消息

RabbitMQ:

df

Postgres:

{error,{cannot_log_to_file,"/var/log/rabbitmq/rabbit@localhost.log",{error,einval}}}

0 个答案:

没有答案