Skip to content

Instantly share code, notes, and snippets.

@pangyuteng
Last active June 3, 2024 17:36
Show Gist options
  • Save pangyuteng/3fea371f9c783d81b75d0ef12099dbef to your computer and use it in GitHub Desktop.
Save pangyuteng/3fea371f9c783d81b75d0ef12099dbef to your computer and use it in GitHub Desktop.
qt+vtk Dockerfile

qt+vtk Dockerfile

build container - pick one to run.


# vtk7 built with no errors!
docker build -f Dockerfile.VTK7 -t vtk7 .

# qt4 and vtk7 built with no errors!
docker build -f Dockerfile.QT4VTK7 -t qt4vtk7 .

# qt5 and vtk9 built with no errors!
docker build -f Dockerfile.QT5VTK9 -t qt5vtk9 .

run sample application

sudo systemctl status ssh # enable sshd x11display
docker run -it -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --user="$(id --user):$(id --group)" qt4vtk7 bash
SimpleView

notes

qt5vtk9
https://gitlab.kitware.com/vtk/vtk/blob/master/Documentation/dev/build.md
qt4vtk7
https://vtk.org/Wiki/VTK/Configure_and_Build
https://vtk.org/Wiki/VTK/Tutorials/QtSetup
https://www.slicer.org/wiki/Documentation/4.8/Developers/Build_Instructions/Prerequisites
https://zetcode.com/gui/qt5/introduction
https://download.qt.io/official_releases/qt/5.12/5.12.0
ssh x11 forwarding
https://stackoverflow.com/questions/19589844/set-up-x11-forwarding-over-ssh
lauch gui from within docker to host
https://askubuntu.com/questions/1161646/is-it-possible-to-run-docker-container-and-show-its-graphical-application-window/1161647#1161647

more testing

https://bugreports.qt.io/browse/QTBUG-50742?attachmentOrder=desc
bash build_and_run_in_docker.sh
#!/bin/sh
# Build Docker image.
docker build -f Dockerfile.qt5 -t docker-test:latest .
docker run -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --user="$(id --user):$(id --group)" docker-test ./docker-test
######################################################################
# Automatically generated by qmake (3.0) tors jan 28 13:41:32 2016
######################################################################
TEMPLATE = app
QT += widgets
TARGET = docker-test
INCLUDEPATH += .
# Input
SOURCES += main.cpp
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y --no-install-recommends \
autotools-dev \
build-essential \
ca-certificates \
cmake \
git \
wget \
unzip \
libx11-dev \
libxt-dev \
libgl1-mesa-dev \
vim \
software-properties-common
#RUN rm -rf /var/lib/apt/lists/*
RUN apt-get install build-essential cmake flex bison zlib1g-dev gnuplot \
libreadline-dev libncurses-dev libxt-dev libopenmpi-dev openmpi-bin \
libboost-system-dev libboost-thread-dev libgmp-dev \
libmpfr-dev python python-dev libglu1-mesa-dev \
libfontconfig1-dev libfreetype6-dev libxcursor-dev libxext-dev \
libxfixes-dev libxft-dev libxi-dev libxrandr-dev libxrender-dev -yq
#### QT
RUN mkdir /inst
RUN mkdir -p /src/qt
WORKDIR /inst
RUN wget https://download.qt.io/new_archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz -O qt.tar.gz && \
tar -xzf qt.tar.gz -C /src/qt --strip-components 1
WORKDIR /src/qt
RUN ./configure -prefix /usr/local/qt -release -opensource -confirm-license \
-no-declarative \
-no-accessibility -no-qt3support \
-no-script -no-scripttools \
-no-javascript-jit -no-audio-backend \
-no-sql-mysql -no-sql-sqlite \
-opengl desktop -nomake examples -nomake tests -nomake plugins
RUN make -j"$(nproc)" && make install
# #### VTK
WORKDIR /inst
RUN mkdir -p /src/vtk
RUN wget https://www.vtk.org/files/release/7.1/VTK-7.1.1.tar.gz -O vtk.tar.gz && \
tar -xzf vtk.tar.gz -C /src/vtk --strip-components 1
WORKDIR /src/vtk
RUN mkdir build
WORKDIR /src/vtk/build
RUN cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS:BOOL=ON \
-DVTK_Group_Qt:BOOL=ON \
-DVTK_RENDERING_BACKEND=OpenGL \
-DQT_QMAKE_EXECUTABLE:FILEPATH=/usr/local/qt/bin/qmake \
-DVTK_QT_VERSION:STRING=4
RUN make -j"$(nproc)" && make install
# #### example
ENV CMAKE_PREFIX_PATH=/usr/local/qt
ENV LD_LIBRARY_PATH /usr/local/lib:$LD_LIBRARY_PATH
RUN mkdir -p /src/vtk/Examples/GUI/Qt/SimpleView/build
WORKDIR /src/vtk/Examples/GUI/Qt/SimpleView/build
RUN cmake .. && make
##
# -static -no-declarative \
#-no-multimedia -no-webkit \
# -DModule_vtkGUISupportQt:BOOL=ON \
# -DModule_vtkGUISupportQtOpenGL:BOOL=ON \
FROM ubuntu:18.04
MAINTAINER Elvis Stansvik <[email protected]>
RUN apt-get update
RUN apt-get install -yy qtbase5-dev
RUN apt-get install -yy qt5-default
RUN apt-get install -yy build-essential
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --fix-missing --no-install-recommends \
libxt-dev libgl1-mesa-dev libglu1-mesa-dev libfontconfig-dev libncurses5-dev \
python python-dev \
mesa-utils libgl1-mesa-glx \
libxcursor-dev libxcursor1 libxcb-cursor-dev libxcb-cursor0 \
libfontconfig1-dev \
libfreetype6-dev \
libx11-dev \
libx11-xcb-dev \
libxext-dev \
libxfixes-dev \
libxi-dev \
libxrender-dev \
libxcb1-dev \
libxcb-glx0-dev \
libxcb-keysyms1-dev \
libxcb-image0-dev \
libxcb-shm0-dev \
libxcb-icccm4-dev \
libxcb-sync0-dev \
libxcb-xfixes0-dev \
libxcb-shape0-dev \
libxcb-randr0-dev \
libxcb-render-util0-dev \
libxkbcommon-dev \
libxkbcommon-x11-dev
COPY . /root/docker-test/
WORKDIR /root/docker-test
RUN qmake
RUN make
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y --no-install-recommends \
autotools-dev \
build-essential \
ca-certificates \
cmake \
git \
wget \
unzip \
libx11-dev \
libxt-dev \
libgl1-mesa-dev \
vim \
software-properties-common
#RUN rm -rf /var/lib/apt/lists/*
RUN apt-get install libpng-dev libx11-dev libxt-dev libgl1-mesa-dev libglu1-mesa-dev libfontconfig-dev libxrender-dev libncurses5-dev -yq
#### QT
RUN mkdir /inst
RUN mkdir -p /src/qt
WORKDIR /inst
RUN wget https://download.qt.io/new_archive/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz -O qt.tar.xz && \
tar -xf qt.tar.xz -C /src/qt --strip-components 1
RUN apt-get install python python-dev -yq
WORKDIR /src/qt
RUN ./configure -prefix /usr/local/qt -release -opensource -confirm-license \
-opengl desktop -nomake examples -nomake tests
RUN make -j"$(nproc)" && make install
# -static -opengl desktop -nomake examples -nomake tests
# -static -no-qml-debug -qt-xcb -no-glib \
# -skip qtdeclarative \
# -skip qtscript \
# -skip qtmultimedia \
# -skip qtxmlpatterns \
# -skip qtsvg \
#### VTK
WORKDIR /inst
RUN mkdir -p /src/vtk
RUN wget https://www.vtk.org/files/release/9.0/VTK-9.0.1.tar.gz -O vtk.tar.gz && \
tar -xzf vtk.tar.gz -C /src/vtk --strip-components 1
WORKDIR /src/vtk
RUN mkdir build
WORKDIR /src/vtk/build
RUN cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_SHARED_LIBS:BOOL=ON \
-DVTK_GROUP_ENABLE_Qt=YES \
-DQt5_DIR:PATH=/usr/local/qt/lib/cmake/Qt5
RUN make -j"$(nproc)" && make install -j"$(nproc)"
#### example
ENV Qt5_DIR /usr/local/qt/lib/cmake/Qt5
ENV LD_LIBRARY_PATH /usr/local/lib:$LD_LIBRARY_PATH
RUN mkdir -p /src/vtk/Examples/GUI/Qt/SimpleView/build
WORKDIR /src/vtk/Examples/GUI/Qt/SimpleView/build
RUN cmake .. && make
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y --no-install-recommends \
autotools-dev \
build-essential \
ca-certificates \
cmake \
git \
wget \
unzip \
libx11-dev \
libxt-dev \
libgl1-mesa-dev \
vim \
software-properties-common
#RUN rm -rf /var/lib/apt/lists/*
#### QT
RUN mkdir /inst
RUN mkdir -p /src/qt
WORKDIR /inst
RUN wget https://download.qt.io/archive/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz -O qt.tar.gz && \
tar -xzf qt.tar.gz -C /src/qt --strip-components 1
WORKDIR /src/qt
RUN ./configure -prefix /usr/local/qt -release -opensource -confirm-license \
-static -no-declarative \
-no-accessibility -no-qt3support \
-no-script -no-scripttools \
-no-javascript-jit -no-webkit \
-no-multimedia -no-audio-backend \
-no-sql-mysql -no-sql-sqlite \
-opengl desktop -nomake examples -nomake tests -nomake plugins
#RUN make -j"$(nproc)" && make install
RUN apt-get install build-essential cmake flex bison zlib1g-dev qt4-dev-tools libqt4-dev libqtwebkit-dev gnuplot \
libreadline-dev libncurses-dev libxt-dev libopenmpi-dev openmpi-bin libboost-system-dev libboost-thread-dev libgmp-dev \
libmpfr-dev python python-dev libglu1-mesa-dev libqt4-opengl-dev -yq
##QT make failed, abandoned and installed via apt-get
# #### VTK
WORKDIR /inst
RUN mkdir -p /src/vtk
RUN wget https://www.vtk.org/files/release/7.1/VTK-7.1.1.tar.gz -O vtk.tar.gz && \
tar -xzf vtk.tar.gz -C /src/vtk --strip-components 1
WORKDIR /src/vtk
RUN mkdir build
WORKDIR /src/vtk/build
RUN cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS:BOOL=ON \
-DVTK_RENDERING_BACKEND=OpenGL \
-DVTK_Group_Qt:BOOL=ON
RUN make -j"$(nproc)" && make install
#### example
ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
RUN mkdir -p /src/vtk/Examples/GUI/Qt/SimpleView/build
WORKDIR /src/vtk/Examples/GUI/Qt/SimpleView/build
RUN cmake .. && make
#include <QApplication>
#include <QMainWindow>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QMainWindow window;
window.show();
QWidget widget;
widget.show();
return app.exec();
}
@pangyuteng
Copy link
Author

for those using wsl2 to build and launch qt apps within ubuntu containers:

In windows, you'll have to install XLaunch and besure to add "-nowgl -ac" at launch of XLaunch.

https://rushichaudhari.github.io/posts/2020-08-19-dockerguiwsl/
https://askubuntu.com/questions/834254/steam-libgl-error-no-matching-fbconfigs-or-visuals-found-libgl-error-failed-t/1394782#1394782

@pangyuteng
Copy link
Author

microsoft/WSL#5535

glxgears ,xeyes
LIBGL_ALWAYS_INDIRECT=0 in docker-novnc (via x11vnc)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment