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, а не эмуляцию системных вызовов. И код снова работает нормально.