我使用 C++ 应用程序创建了一个 docker 容器 (
ubuntu:focal
),该应用程序使用 boost::filesystem
(v1.76.0) 在处理数据时创建一些目录。如果我在本地运行容器,它可以工作,但部署到 Cloud Run 时,它会失败。
一个简单的陈述,例如
boost::filesystem::exists(boost::filesystem::current_path())
失败并显示“无效参数'/current/path/here'”。 它在这个 C++ 应用程序中不起作用,但在运行等效语句的 Python 应用程序中,它确实起作用。
阅读文档我可以看到Cloud Run正在使用gVisor,并且并非所有系统调用都得到完全支持(链接:https://gvisor.dev/docs/user_guide/compatibility/linux/amd64/),尽管如此,我期望简单的调用能够工作:检查目录是否存在,创建目录,删除,...
也许我在部署容器时做错了什么。有什么办法可以解决这个问题吗?我可以使用任何
boost
配置来防止它使用某些系统调用吗?
感谢您的帮助!
我在谷歌云功能中运行SlideIO(使用boost::filesystem)时遇到了同样的问题。它在本地工作正常,但在谷歌云上总是返回“boost::filesystem::status: Invalid argument [system:22]”。
我为 Cloud Run 切换到了第二代执行环境,它提供了完整的 Linux 兼容性,而不是系统调用模拟。代码又可以正常工作了。