boost::文件系统在 Google Cloud Run 中无法工作(使用 gVisor)

问题描述 投票:0回答:1

我使用 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
配置来防止它使用某些系统调用吗?

感谢您的帮助!

c++ boost google-cloud-run boost-filesystem gvisor
1个回答
0
投票

我在谷歌云功能中运行SlideIO(使用boost::filesystem)时遇到了同样的问题。它在本地工作正常,但在谷歌云上总是返回“boost::filesystem::status: Invalid argument [system:22]”。

我为 Cloud Run 切换到了第二代执行环境,它提供了完整的 Linux 兼容性,而不是系统调用模拟。代码又可以正常工作了。

© www.soinside.com 2019 - 2024. All rights reserved.