Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Use qt installer framework in a windows docker container
Forum Updated to NodeBB v4.3 + New Features

Use qt installer framework in a windows docker container

Scheduled Pinned Locked Moved Unsolved General and Desktop
13 Posts 5 Posters 2.1k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • apalomerA Offline
    apalomerA Offline
    apalomer
    wrote on last edited by
    #1

    I am trying to build a container that has qt 5.15.1 and qt installer framework 4.1.1 installed. For this I have the following docker file:

    # Use a machine from 
    FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019
    
    # Set label
    LABEL maintainer="myemail@mydomain.com"
    
    # Add Qt5.15.1
    ADD http://download.qt.io/development_releases/online_installers/qt-unified-windows-x86-4.0.0_beta-online.exe C:/qt-unified-windows-x86-4.0.0_beta-online.exe
    RUN qt-unified-windows-x86-4.0.0_beta-online.exe install qt.qt5.5151.win64_msvc2019_64 --email myemail@mydomain.com --pw mypass --accept-licenses --accept-obligations --auto-answer telemetry-question=No,AssociateCommonFiletypes=Yes --confirm-command --no-default-installations
    
    # Qt installer framework
    ADD https://download.qt.io/official_releases/qt-installer-framework/4.1.1/QtInstallerFramework-windows-x86-4.1.1.exe C:/QtInstallerFramework-windows-x86-4.1.1.exe
    RUN C:/QtInstallerFramework-windows-x86-4.1.1.exe in --al -c
    
    # Clean
    RUN del /Q "C:/QtInstallerFramework-windows-x86-4.1.1.exe"
    

    You can generate the docker usin docker build -f Dockerfile -t apalomer/qt:windows . Be aware that to generate the image you need to change the email and password of the RUN qt-unified-windows... command bysomething valid.

    This docker is build without a problem. However, when I start the container with docker run -it apalomer/qt:windows and try to run binarycrator, nothing happens. In the docker I run C:\Qt\QtIFW-4.1.1\bin\binarycreator.exe which results with an exit code of -1073741515 (checked using echo %errorlevel% in the same terminal just after the binarycreator call). The same two commands run in a cmd of my computer (not inside the docker) show the help for the binarycreator and the error level is 1.

    Any idea on why can't I run binarycreator in the docker container?

    ps: the docker container is being pushed to dockerhub if you want to try the container.

    1 Reply Last reply
    0
    • apalomerA Offline
      apalomerA Offline
      apalomer
      wrote on last edited by
      #2

      I have solved the issue myself. Although I do not understand why, everything works if I use FROM mcr.microsoft.com/windows:20H2 instead of FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019.

      R 1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #3

        Hi,

        Just an educated guess but it looks like a full Windows VS a minimal version for server use.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • apalomerA Offline
          apalomerA Offline
          apalomer
          wrote on last edited by
          #4

          Yes, but shouldn't I get an error or something during installation if there is some important dependency from qt installer framework that is missing?

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #5

            The thing that might be missing is the GUI part but it does not mean that it is something that can be detected easily. You might also want to use the offscreen backend so it might still be a viable solution.

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • apalomerA Offline
              apalomerA Offline
              apalomer
              wrote on last edited by
              #6

              I don't know, and have not been able to find, anyting relating offscreen backend neither for server core nor for QTIFW. Could you please point something out about this so I can try to digg deeper into it?
              Thanks!

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #7

                I meant the Qt QPA backend named offscreen.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  Siriusval
                  wrote on last edited by
                  #8

                  Exit code

                  When you execute one of QT IFW binaries in your servercore container, you can get the exit code in powershell.

                  Let's take repogen for example.

                  > .\repogen.exe
                  > $LastExitCode
                  -1073741515
                  

                  It exits with code -1073741515.
                  The Microsoft Error Lookup Tool output STATUS_DLL_NOT_FOUND.

                  Get missing dll

                  Thanks to DUMPBIN (that comes with MSVC Build Tools), you can see the DLLs needed for qt ifw binaries.

                  Mine was located at C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\dumpbin.exe.

                  dumpbin /DEPENDENTS C:\Qt\QtIFW-4.1.1\bin\repogen.exe 
                  

                  Note the results, you can then search for each DLL on your OS with this powershell cmd.

                  Get-ChildItem -Path C:\Windows\ -Filter dcomp.dll -Recurse -ErrorAction SilentlyContinue -Force
                  

                  I found out that dcomp.dll was missing.
                  Indeed, we know Windows servercore is lacking GUI DLLs.

                  Resolve

                  As it doesn't come in a package, you can copy it directly in your container.
                  Be careful to get a dll from Windows Server version matching your container (here 1809).

                  Here the host was Windows Server 2019 Standard (1809).
                  Container was mcr.microsoft.com/windows/servercore:1809

                  docker stop <image_name>
                  docker cp C:\Windows\SysWOW64\dcomp.dll <image_name>:C:\Windows\SysWOW64\dcomp.dll
                  

                  Now repogen is working.
                  Others QT IFW binaries seem to work fine too.

                  Much better than the +10Go from a Windows 10 image. 😁

                  mrjjM 1 Reply Last reply
                  2
                  • S Siriusval

                    Exit code

                    When you execute one of QT IFW binaries in your servercore container, you can get the exit code in powershell.

                    Let's take repogen for example.

                    > .\repogen.exe
                    > $LastExitCode
                    -1073741515
                    

                    It exits with code -1073741515.
                    The Microsoft Error Lookup Tool output STATUS_DLL_NOT_FOUND.

                    Get missing dll

                    Thanks to DUMPBIN (that comes with MSVC Build Tools), you can see the DLLs needed for qt ifw binaries.

                    Mine was located at C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\dumpbin.exe.

                    dumpbin /DEPENDENTS C:\Qt\QtIFW-4.1.1\bin\repogen.exe 
                    

                    Note the results, you can then search for each DLL on your OS with this powershell cmd.

                    Get-ChildItem -Path C:\Windows\ -Filter dcomp.dll -Recurse -ErrorAction SilentlyContinue -Force
                    

                    I found out that dcomp.dll was missing.
                    Indeed, we know Windows servercore is lacking GUI DLLs.

                    Resolve

                    As it doesn't come in a package, you can copy it directly in your container.
                    Be careful to get a dll from Windows Server version matching your container (here 1809).

                    Here the host was Windows Server 2019 Standard (1809).
                    Container was mcr.microsoft.com/windows/servercore:1809

                    docker stop <image_name>
                    docker cp C:\Windows\SysWOW64\dcomp.dll <image_name>:C:\Windows\SysWOW64\dcomp.dll
                    

                    Now repogen is working.
                    Others QT IFW binaries seem to work fine too.

                    Much better than the +10Go from a Windows 10 image. 😁

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    Hi

                    So how much space did it end up using ?

                    Just tried a Win 11 in a VM and it was 45 GB so if that is any indication, dockers
                    seems like more fun than WMs in some years.

                    S 1 Reply Last reply
                    0
                    • mrjjM mrjj

                      Hi

                      So how much space did it end up using ?

                      Just tried a Win 11 in a VM and it was 45 GB so if that is any indication, dockers
                      seems like more fun than WMs in some years.

                      S Offline
                      S Offline
                      Siriusval
                      wrote on last edited by
                      #10

                      @mrjj Our custom Win10 docker image uses 19Go, but there's multiple MSVC installs and softwares we need in our stack.
                      As the Windows ServerCore is only 6Go, you could probably end up with something in between :)

                      mrjjM 1 Reply Last reply
                      1
                      • S Siriusval

                        @mrjj Our custom Win10 docker image uses 19Go, but there's multiple MSVC installs and softwares we need in our stack.
                        As the Windows ServerCore is only 6Go, you could probably end up with something in between :)

                        mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by mrjj
                        #11

                        @Siriusval
                        Hi
                        19GB with multiple VS installed seems pretty good as normally I would hit
                        around 100 GB in a Vm.
                        What do you use for the GUI apps ? VNC or remote desktop ?
                        Or its ONLY compilers and ssh and commanline ?

                        S 1 Reply Last reply
                        0
                        • mrjjM mrjj

                          @Siriusval
                          Hi
                          19GB with multiple VS installed seems pretty good as normally I would hit
                          around 100 GB in a Vm.
                          What do you use for the GUI apps ? VNC or remote desktop ?
                          Or its ONLY compilers and ssh and commanline ?

                          S Offline
                          S Offline
                          Siriusval
                          wrote on last edited by
                          #12

                          Hello @mrjj,

                          This image is only used for CI.
                          It's only command line, no GUI.
                          Even if you wanted to use VNC or remote desktop, I'm not sure you could.
                          The official windows/servercore docker image comes without the "Desktop Experience", so there's no GUI at all.
                          Hence our problem of missing graphic .DLLs like dcomp.

                          Hope this helps 😁.

                          1 Reply Last reply
                          1
                          • apalomerA apalomer

                            I have solved the issue myself. Although I do not understand why, everything works if I use FROM mcr.microsoft.com/windows:20H2 instead of FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019.

                            R Offline
                            R Offline
                            rodrigoleao
                            wrote on last edited by
                            #13

                            @apalomer said in Use qt installer framework in a windows docker container:

                            I have solved the issue myself. Although I do not understand why, everything works if I use FROM mcr.microsoft.com/windows:20H2 instead of FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-ltsc2019.

                            I tried that but got this error: (8007052E The user name or password is incorrect)

                            1 Reply Last reply
                            0

                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved