Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Failed to run Docker image after build



  • I'm a newbie in the docker and Qt world, so bear with me.. I've "succeeded" in building a docker image with the following Dockerfile:

    FROM public.ecr.aws/ubuntu/ubuntu:20.04
    
    RUN apt-get update
    
    RUN DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata
    # Install Dependencies
    RUN apt-get -y install software-properties-common wget build-essential autoconf git fuse libgl1-mesa-dev psmisc libpq-dev libssl-dev openssl libffi-dev zlib1g-dev libdbus-1-3 libpulse-mainloop-glib0 python3 python3-pip desktop-file-utils libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-composite0 libxcb-cursor0 libxcb-damage0 libxcb-dpms0 libxcb-dri2-0 libxcb-dri3-0 libxcb-ewmh2 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-record0 libxcb-render0 libxcb-res0 libxcb-screensaver0 libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-util1 libfontconfig libxcb-xkb1 libxkbcommon-x11-0 libegl1-mesa-dev unixodbc-dev clang-10 lld-10 clang-tidy-10 clang-format-10 ninja-build doxygen ccache
    
    
    # Update gcc for correct c++17 support
    # Possible value 7/8/9
    ARG GCC=9
    
    RUN apt-get install -y software-properties-common                         && \
        add-apt-repository ppa:ubuntu-toolchain-r/test                        && \
        apt-get update                                                        && \
        apt-get -y install g++-${GCC}                                         && \
        update-alternatives                                                      \
          --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC} 60                      \
          --slave /usr/bin/g++ g++ /usr/bin/g++-${GCC}                           \
          --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-${GCC}                  \
          --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-${GCC}                  \
          --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-${GCC}  &&  \
        update-alternatives --config gcc
    
    # Build cool cmake version (ubuntu 16.04 comes with cmake 3.5)
    ARG CMAKE=3.20.0
    
    RUN wget -c -nv https://github.com/Kitware/CMake/releases/download/v${CMAKE}/cmake-${CMAKE}.tar.gz && \
        tar zxvf cmake-${CMAKE}.tar.gz   && \
        rm -rf cmake-${CMAKE}.tar.gz     && \
        cd cmake-${CMAKE}                && \
        ./configure                      && \
        make -j $(nproc)                 && \
        make install                     && \
        cd ..                            && \
        rm -rf cmake-${CMAKE}
    
    # Install Qt
    ARG QT=5.15.1
    ARG QT_MODULES='qtscript qtwebengine'
    ARG QT_HOST=linux
    ARG QT_TARGET=desktop
    ARG QT_ARCH=
    
    # Download & Install Qt
    RUN pip3 install aqtinstall && \
        aqt install --outputdir /opt/qt ${QT} ${QT_HOST} ${QT_TARGET} ${QT_ARCH} -m ${QT_MODULES}
    
    ENV PATH /opt/qt/${QT}/gcc_64/bin:$PATH
    ENV QT_PLUGIN_PATH /opt/qt/${QT}/gcc_64/plugins/
    ENV QML_IMPORT_PATH /opt/qt/${QT}/gcc_64/qml/
    ENV QML2_IMPORT_PATH /opt/qt/${QT}/gcc_64/qml/
    ENV Qt5_DIR /opt/qt/${QT}/gcc_64/
    ENV Qt5_Dir /opt/qt/${QT}/gcc_64/
    ENV Qt6_DIR /opt/qt/${QT}/gcc_64/
    
    # Remove style i'm not interested in
    RUN rm -rf ${Qt5_DIR}/qml/QtQuick/Controls.2/designer  && \
        rm -rf ${Qt5_DIR}/qml/QtQuick/Controls.2/Fusion    && \
        rm -rf ${Qt5_DIR}/qml/QtQuick/Controls.2/Imagine   && \
        rm -rf ${Qt5_DIR}/qml/QtQuick/Controls.2/Universal
    
    # Install linuxdeployqt
    RUN wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" -O /usr/bin/linuxdeployqt && \
        chmod a+x /usr/bin/linuxdeployqt
        
    WORKDIR /src
    COPY src/ ./
    # RUN cmake . && make
    # RUN ctest
    CMD [ "/bin/bash" ]
    
    

    When I try to run the docker image in Docker Desktop I get the following error:

    Got keys from plugin meta data ("wayland-xcomposite-egl")
    QFactoryLoader::QFactoryLoader() looking at "/opt/qt/5.15.1/gcc_64/plugins/platforms/libqwayland-xcomposite-glx.so"
    Found metadata in lib /opt/qt/5.15.1/gcc_64/plugins/platforms/libqwayland-xcomposite-glx.so, metadata=
    {
        "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
        "MetaData": {
            "Keys": [
                "wayland-xcomposite-glx"
            ]
        },
        "archreq": 0,
        "className": "QWaylandXCompositeGlxPlatformIntegrationPlugin",
        "debug": false,
        "version": 331520
    }
    
    
    Got keys from plugin meta data ("wayland-xcomposite-glx")
    QFactoryLoader::QFactoryLoader() looking at "/opt/qt/5.15.1/gcc_64/plugins/platforms/libqxcb.so"
    Found metadata in lib /opt/qt/5.15.1/gcc_64/plugins/platforms/libqxcb.so, metadata=
    {
        "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
        "MetaData": {
            "Keys": [
                "xcb"
            ]
        },
        "archreq": 0,
        "className": "QXcbIntegrationPlugin",
        "debug": false,
        "version": 331520
    }
    
    
    Got keys from plugin meta data ("xcb")
    QFactoryLoader::QFactoryLoader() checking directory path "/src/platforms" ...
    loaded library "/opt/qt/5.15.1/gcc_64/plugins/platforms/libqxcb.so"
    qt.qpa.xcb: could not connect to display
    qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
    This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
    
    Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, xcb.
    
    Aborted
    
    

    The docker image is built without any errors. But when I try to run the docker I get the above error. How do I fix this?


  • Lifetime Qt Champion

    @chrish10r said in Failed to run Docker image after build:

    qt.qpa.xcb: could not connect to display

    Looks like no X server is running in your Docker image?



  • @jsulm Could you please elaborate? What is an X-server and how do I include this in my Docker image? Sorry, I'm quite new to this...


  • Lifetime Qt Champion


Log in to reply