为什么 QDir::exists() 在 docker 容器中不起作用?

Why QDir::exists() do not work in docker container?

本文关键字:不起作用 docker QDir exists 为什么      更新时间:2023-10-16

在我的主机 KDE Neon 机器中执行的以下程序(最新升级到 18.04(输出按预期Hello World! 1,而当从使用 Dockerfile 构建并与sudo docker run -it qdir一起运行的 Docker 容器执行时,它输出Hello World! 0

QDir是否需要运行dbus或其他服务?

C++程序:

#include <QDir>
#include <iostream>

int main(int argc [[maybe_unused]], char** argv [[maybe_unused]])
{
QDir d("/");
std::cout << "Hello World! " << d.exists() << std::endl;
return 0;
}

Dockerfile:

FROM kdeneon/plasma:user-lts
USER root
RUN apt-get install -y qt5-default
WORKDIR /
COPY qdir /
CMD /bin/bash

编辑,CMakeLists.txt以构建程序:

project(qdir)
cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
set(QT_MIN_VERSION "5.3.0")
find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core)
include_directories(${Qt5Core_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR})
set(qdir_SRCS main.cpp)
add_executable(qdir ${qdir_SRCS})
target_link_libraries(qdir ${Qt5Core_LIBRARIES})
install(TARGETS qdir RUNTIME DESTINATION bin)

编辑2:我创建了一个github项目,重新组合了上述所有内容。要重现此问题,如果您有Qt SDK,cmake,ninja和docker,只需执行以下操作:

git clone https://github.com/kleag/qdirtest
cd qdirtest
./test.sh

这是我得到的输出:

$ ./test.sh
[…]
Successfully built f710cbb7a3c9
Successfully tagged qdir:latest
Hello World! 1
Hello World! 0

我从 KDE 论坛上的 apachelogger 那里得到了答案:

由于5.10 Qt使用了一些新的系统调用。其中之一是 statx 最后我检查了系统调用没有在 docker 中列入白名单,也没有 它可以列入白名单,因为用于上游码头工人的libseccomp Build太旧了,不知道Statx是什么。机会是 你看到的问题是。如果是这样,seccomp=unlimited将使它工作。