在 Docker 中运行一个基本的 Qt 应用程序
Posted
技术标签:
【中文标题】在 Docker 中运行一个基本的 Qt 应用程序【英文标题】:Running a basic Qt application in Docker 【发布时间】:2017-07-24 19:09:57 【问题描述】:我正在尝试在 docker for windows 中运行一个基本的控制台应用程序(在 Qt 中开发)。开发环境为windows 10,编译器VC2015,32bit Application。
这是你好世界,我的想法是在我尝试移植实际应用程序之前找到问题。
代码是最简单的c++代码:
#include <QCoreApplication>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
QCoreApplication a(argc, argv);
std::cout<<"Hello world";
return a.exec();
Dockerfile 是:
# Comment:
#It needs a Microsoft environment to run
FROM microsoft/nanoserver:latest
#Create a folder inside the home folder in the Container Operating System
RUN mkdir -p C:\HelloWorld
#Copy the excutable from this folder to the folder inside the Container
Operating System.
COPY . /HelloWorld/
#Run the application inside the container operating system.
CMD ["C:\\HelloWorld\\docker_HelloWorld.exe"]
我预期的最终结果是“Hello world”的控制台/shell 输出。但我什么也得不到。有人可以指出缺少什么吗?
谢谢。
【问题讨论】:
GUI 应用程序/控制台?他们在异世界。你需要一个 Dock GUI Qt 应用程序吗? 我有一个现成的用于实际移植的 GUI 应用程序。控制台是一项降低复杂性的测试,用于了解如何将 Qt 应用程序移植到 Docker。我不需要停靠 GUI Qt 应用程序。如果我能够解决 GUI 应用程序的一些问题,我会将其转换为控制台。但这不是当前的问题。我想了解的是如何让这个控制台 Qt 应用程序以所需的输出运行。 您是否将所有 Qt 依赖项静态链接到您的可执行文件? 谢谢,好点子。它是动态喜欢的。让我尝试静态链接。 我仍然想用动态链接来解决它,所以任何指向正确方向的帮助都会受到欢迎。 【参考方案1】:我怀疑 nanoserver 映像仅支持 x64 应用程序,如果可能,请将您的应用程序构建为 x64 并在 nanoserver 及其依赖项中运行它。
如果无法构建为 x64,那么您可以使用 windowsservercore 容器来运行 x86 应用程序。
您应该使用该应用程序复制依赖程序集,否则它将无法正常工作。
【讨论】:
嗨桑托什,你的问题解决了吗?你能用动态链接将你的 GUI 容器化吗?我也有同样的问题。以上是关于在 Docker 中运行一个基本的 Qt 应用程序的主要内容,如果未能解决你的问题,请参考以下文章