2

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

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)

Edit2: 我创建了一个重新组合以上所有内容的 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
4

1 回答 1

1

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

由于 5.10 Qt 使用了一些新的系统调用。其中之一是 statx,最后我检查了系统调用没有在 docker 中列入白名单,也不是可列入白名单的,因为用于上游 docker 构建的 libseccomp 太旧并且不知道 statx 是什么。您看到的问题可能就是这样。如果是这样, seccomp=unconfined 会让它工作。

于 2018-10-10T10:27:01.993 回答