boost::filesystem не работает в Google Cloud Run (с использованием gVisor)

Я создал док-контейнер ( ubuntu:focal) с приложением C++, которое использует boost::filesystem(v1.76.0) для создания каталогов при обработке данных. Он работает, если я запускаю контейнер локально, но не работает при развертывании в Cloud Run.

Простое утверждение вроде

      boost::filesystem::exists(boost::filesystem::current_path())

не работает с "Недопустимый аргумент '/ текущий / путь / здесь'" . Это не работает в этом приложении C++, но в приложении Python, выполняющем эквивалентные операторы, это работает.

Читая документы, я вижу, что Cloud Run использует gVisor, и не все системные вызовы полностью поддерживаются (ссылка: https://gvisor.dev/docs/user_guide/compatibility/linux/amd64/), тем не менее я ожидал бы простых вызовов работа: проверьте, существует ли каталог, создайте каталог, удалите, ...

Может я что-то не так делаю при развертывании своего контейнера. Есть ли способ обойти это? Любой boost конфигурацию, которую я могу использовать, чтобы предотвратить использование некоторых системных вызовов?

Спасибо за вашу помощь!

1 ответ

Я столкнулся с той же проблемой при запуске SlideIO (который использует boost::filesystem) в облачной функции Google. Он отлично работает локально, но всегда возвращает «boost::filesystem::status: Invalid аргумент [system:22]» в облаке Google.

Я перешел на среду выполнения второго поколения для Cloud Run, которая обеспечивает полную совместимость с Linux, а не эмуляцию системных вызовов. И код снова работает нормально.

Другие вопросы по тегам