Qt doesn't work in my ArchLinux docker



  • Hello,

    I'm using Qt inside a Docker container and getting some very weird behaviour.

    Here's my Dockerfile

    FROM base/archlinux
    
    USER root
    
    ENV ARCH_USER archie
    
    RUN pacman -Syy && \
        pacman -S --noconfirm sudo
    
    RUN useradd --create-home $ARCH_USER && \
        passwd -d $ARCH_USER && \
        echo "${ARCH_USER} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
    
    RUN pacman -S --noconfirm \
        lximage-qt
    
    USER $ARCH_USER
    WORKDIR /home/$ARCH_USER
    

    I build it by:

    docker build -t qt-test .
    

    Then run it as

    docker run -it qt-test
    

    Inside the container I run:

    [archie@hash ~]$ QT_DEBUG_PLUGINS=1 lximage-qt 
    QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/qt/plugins/bearer" ...
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/bearer/libqconnmanbearer.so"
    /usr/lib/qt/plugins/bearer/libqconnmanbearer.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/qt/plugins/bearer/libqconnmanbearer.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/bearer/libqgenericbearer.so"
    /usr/lib/qt/plugins/bearer/libqgenericbearer.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/qt/plugins/bearer/libqgenericbearer.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/bearer/libqnmbearer.so"
    /usr/lib/qt/plugins/bearer/libqnmbearer.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/qt/plugins/bearer/libqnmbearer.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/qt/plugins/platforms" ...
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqeglfs.so"
    /usr/lib/qt/plugins/platforms/libqeglfs.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/qt/plugins/platforms/libqeglfs.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqlinuxfb.so"
    /usr/lib/qt/plugins/platforms/libqlinuxfb.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/qt/plugins/platforms/libqlinuxfb.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqminimal.so"
    /usr/lib/qt/plugins/platforms/libqminimal.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/qt/plugins/platforms/libqminimal.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqminimalegl.so"
    /usr/lib/qt/plugins/platforms/libqminimalegl.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/qt/plugins/platforms/libqminimalegl.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqoffscreen.so"
    /usr/lib/qt/plugins/platforms/libqoffscreen.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/qt/plugins/platforms/libqoffscreen.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqvnc.so"
    /usr/lib/qt/plugins/platforms/libqvnc.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/qt/plugins/platforms/libqvnc.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqxcb.so"
    /usr/lib/qt/plugins/platforms/libqxcb.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/qt/plugins/platforms/libqxcb.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() checking directory path "/home/archie/platforms" ...
    qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
    This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
    
    Aborted (core dumped)
    

    lximage-qt is just a random app I'm using to test Qt.
    GTK apps work fine.

    I haven't had any luck figuring out what the errors mean.
    Any help would be appreciated!


  • Lifetime Qt Champion

    Hi,

    Do you have any restriction for your containers ? E.g. maximum usable memory available.



  • I do not have such restrictions. As a test, I allocated 8 GBs of memory inside of the container.

    I don't see a noticeable spike in memory usage when I try to run lximage-qt, say


  • Lifetime Qt Champion

    Can you reproduce that with a minimal sample



  • If you save the Dockerfile, run the build and run provided above, I believe it should reproduce the behaviour.

    Please let me know how I can make it more minimal


  • Moderators

    Using most recent updates to arch, ran your dockerfile and everything worked as expected. This is with a standard install of docker, didn't tweak any settings (at least that I remember).

    Here is the output:

    [archie@d6d7285b082f ~]$ QT_DEBUG_PLUGINS=1 lximage-qt                                                      
    QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/qt/plugins/bearer" ...                   
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/bearer/libqconnmanbearer.so"
    Found metadata in lib /usr/lib/qt/plugins/bearer/libqconnmanbearer.so, metadata=                            
    {                                                                                                           
        "IID": "org.qt-project.Qt.QBearerEngineFactoryInterface",                                               
        "MetaData": {                                                                                           
            "Keys": [       
        "MetaData": {                                                                                    [84/653]
            "Keys": [           
                "connman"              
            ]                         
        },                        
        "className": "QConnmanEnginePlugin",     
        "debug": false,           
        "version": 330497 
    }                                 
                                                           
                                       
    Got keys from plugin meta data ("connman")
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/bearer/libqgenericbearer.so"               
    Found metadata in lib /usr/lib/qt/plugins/bearer/libqgenericbearer.so, metadata=                            
    {                                                    
        "IID": "org.qt-project.Qt.QBearerEngineFactoryInterface",                                               
        "MetaData": {                
            "Keys": [             
                "generic"   
            ]          
        },                         
        "className": "QGenericEnginePlugin",                               
        "debug": false,    
        "version": 330497
    }                                   
                              
                                        
    Got keys from plugin meta data ("generic")   
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/bearer/libqnmbearer.so"                    
    Found metadata in lib /usr/lib/qt/plugins/bearer/libqnmbearer.so, metadata=                                 
    {                              
        "IID": "org.qt-project.Qt.QBearerEngineFactoryInterface",                                               
        "MetaData": {              
            "Keys": [     
                "networkmanager"      
            ]                                    
        },                                
        "className": "QNetworkManagerEnginePlugin",
        "debug": false,      
        "version": 330497                 
    }                         
                                 
                               
    Got keys from plugin meta data ("networkmanager")
    loaded library "/usr/lib/qt/plugins/bearer/libqconnmanbearer.so"                                            
    loaded library "/usr/lib/qt/plugins/bearer/libqgenericbearer.so"                                            
    loaded library "/usr/lib/qt/plugins/bearer/libqnmbearer.so"
    QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/qt/plugins/platforms" ...                
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqeglfs.so"
    Found metadata in lib /usr/lib/qt/plugins/platforms/libqeglfs.so, metadata=
    {                                     
        "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
        "MetaData": {                         
            "Keys": [                        
                "eglfs"                     
            ]                         
        },                                                                  
        "className": "QEglFSIntegrationPlugin",
        "debug": false,                              
        "version": 330497                    
    }                                                                                                           
                                                                                                                
                                                
    Got keys from plugin meta data ("eglfs")                                                                    
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqlinuxfb.so"
    Found metadata in lib /usr/lib/qt/plugins/platforms/libqlinuxfb.so, metadata=
    {                                           
        "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
        "MetaData": {                  
            "Keys": [                           
                "linuxfb"
            ]                      
        },                            
        "className": "QLinuxFbIntegrationPlugin",            
        "debug": false,                
        "version": 330497                                                       
    }                                                                                                           
                                                                                                                
                                                                                                                
    Got keys from plugin meta data ("linuxfb")                                                                  
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqminimal.so"   
    Found metadata in lib /usr/lib/qt/plugins/platforms/libqminimal.so, metadata=                               
    {                                                                                                           
        "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",                                
        "MetaData": {                                                                                           
            "Keys": [       
                "minimal"              
            ]                         
        },                        
        "className": "QMinimalIntegrationPlugin",
        "debug": false,           
        "version": 330497 
    }                                 
                                                           
                                       
    Got keys from plugin meta data ("minimal")
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqminimalegl.so"               
    Found metadata in lib /usr/lib/qt/plugins/platforms/libqminimalegl.so, metadata=                            
    {                                                    
        "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",                                
        "MetaData": {                
            "Keys": [             
                "minimalegl"
            ]          
        },                         
        "className": "QMinimalEglIntegrationPlugin",                       
        "debug": false,    
        "version": 330497
    }                                   
                              
                                        
    Got keys from plugin meta data ("minimalegl")
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqoffscreen.so"                
    Found metadata in lib /usr/lib/qt/plugins/platforms/libqoffscreen.so, metadata=                             
    {                              
        "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",                                
        "MetaData": {              
            "Keys": [     
                "offscreen"           
            ]                                    
        },                                
        "className": "QOffscreenIntegrationPlugin",
        "debug": false,      
        "version": 330497                 
    }                         
                                 
                               
    Got keys from plugin meta data ("offscreen")     
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqvnc.so"                      
    Found metadata in lib /usr/lib/qt/plugins/platforms/libqvnc.so, metadata=                                   
    {                                                          
        "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",                                
        "MetaData": {                                                                       
            "Keys": [                                                          
                "vnc"                     
            ]                                                                   
        },                                    
        "className": "QVncIntegrationPlugin",
        "debug": false,                     
        "version": 330497             
    }                                                                       
                                               
                                                     
    Got keys from plugin meta data ("vnc")   
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt/plugins/platforms/libqxcb.so"                      
    Found metadata in lib /usr/lib/qt/plugins/platforms/libqxcb.so, metadata=                                   
    {                                           
        "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",                                
        "MetaData": {                                                                         
            "Keys": [                                                            
                "xcb"                           
            ]                                                                   
        },                             
        "className": "QXcbIntegrationPlugin",   
        "debug": false,  
        "version": 330497          
    }                                 
                                                             
                                       
    Got keys from plugin meta data ("xcb")                                      
    QFactoryLoader::QFactoryLoader() checking directory path "/usr/bin/platforms" ...                           
    QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-archie'                                
    loaded library "/usr/lib/qt/plugins/platforms/libqxcb.so"                                                   
    qt.qpa.screen: QXcbConnection: Could not connect to display                                                 
    Could not connect to any X display.                                                          
    QLibraryPrivate::unload succeeded on "/usr/lib/qt/plugins/platforms/libqxcb.so"                             
    On QtCore unload, "/usr/lib/qt/plugins/bearer/libqconnmanbearer.so" was leaked, with 2 users                
    On QtCore unload, "/usr/lib/qt/plugins/bearer/libqgenericbearer.so" was leaked, with 2 users                
    On QtCore unload, "/usr/lib/qt/plugins/bearer/libqnmbearer.so" was leaked, with 2 users                     
    

    My guess is you actually have a memory issue in your container.


  • Lifetime Qt Champion

    In addition to what @ambershark wrote, what are your host specifications ?



  • I ran into similar issue when building a container of the calibre application:
    My docker host is running debian 9

    DockerFile

    FROM base/archlinux
    
    RUN export RUNLEVEL=1
    RUN pacman --noconfirm -Syu calibre
    
    RUN echo '#!/usr/sbin/bash' > /usr/bin/run.sh
    RUN echo 'calibre-server $(ls -d /library/*);' >> /usr/bin/run.sh
    RUN echo 'while true; do sleep 86400;done' >> /usr/bin/run.sh
    RUN chmod +x /usr/bin/run.sh
    ENTRYPOINT ["/usr/bin/run.sh"]
    

    The server failed to start with this error:

    qt.qpa.plugin: Could not find the Qt platform plugin "headless" in "/usr/lib/calibre/calibre/plugins"
    This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
    
    Aborted (core dumped)
    

    Debugging further it looks like I am getting out of memory errors for every single plugin

    QT_DEBUG_PLUGINS=1 calibre-debug -c "from calibre.gui2 import *; ensure_app()"
    
    QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/calibre/calibre/plugins" ...
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/calibre/calibre/plugins/_patiencediff_c.so"
    /usr/lib/calibre/calibre/plugins/_patiencediff_c.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/calibre/calibre/plugins/_patiencediff_c.so'." 
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/calibre/calibre/plugins/bzzdec.so"
    /usr/lib/calibre/calibre/plugins/bzzdec.so: Cannot allocate memory
    "Out of memory while loading plugin '/usr/lib/calibre/calibre/plugins/bzzdec.so'." 
             not a plugin
    

    I have Free memory available:

    # free -g
                  total        used        free      shared  buff/cache   available
    Mem:             15           1           2           0          12          14
    


  • Same thing occurs with lximage-qt
    It drops a core, I did a backtrace:

    Reading symbols from /usr/sbin/lximage-qt...(no debugging symbols found)...done.
    [New LWP 3477]
    [New LWP 3478]
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/usr/lib/libthread_db.so.1".
    Core was generated by `lximage-qt'.
    Program terminated with signal SIGABRT, Aborted.
    #0  0x00007fdbdeac1b5f in raise () from /usr/lib/libc.so.6
    [Current thread is 1 (Thread 0x7fdbd543ecc0 (LWP 3477))]
    (gdb) bt
    #0  0x00007fdbdeac1b5f in raise () at /usr/lib/libc.so.6
    #1  0x00007fdbdeaac452 in abort () at /usr/lib/libc.so.6
    #2  0x00007fdbdbf787fc in  () at /usr/lib/libQt5Core.so.5
    #3  0x00007fdbdc50cbda in QGuiApplicationPrivate::createPlatformIntegration() () at /usr/lib/libQt5Gui.so.5
    #4  0x00007fdbdc50d09e in QGuiApplicationPrivate::createEventDispatcher() () at /usr/lib/libQt5Gui.so.5
    #5  0x00007fdbdc170f15 in QCoreApplicationPrivate::init() () at /usr/lib/libQt5Core.so.5
    #6  0x00007fdbdc50e2c0 in QGuiApplicationPrivate::init() () at /usr/lib/libQt5Gui.so.5
    #7  0x00007fdbdcae7b9a in QApplicationPrivate::init() () at /usr/lib/libQt5Widgets.so.5
    #8  0x0000560509e3b92e in  ()
    #9  0x00007fdbdeaae003 in __libc_start_main () at /usr/lib/libc.so.6
    #10 0x0000560509e3c83a in _start ()
    


  • @krey said in Qt doesn't work in my ArchLinux docker:

    lximage-qt is just a random app

    Could it be possible you have a Qt version mismatch from the machine you built the app to the Qt version in the Docker image you want to run it ?

    How you deploy your Qt app into the Docker image?

    Your issue looks to me similar to this post.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.