我正在尝试将GUI应用程序制作成Docker镜像,并已经取得了一些成功。如果我将Dockerfile构建成一个镜像,然后执行
我的最佳猜测是,当我运行
更新:我编辑了我的Dockerfile,使用supervisord管理GUI应用程序的启动。现在,我的docker run命令将启动supervisor,supervisor再启动我的GUI应用程序,它可以工作。关于这个问题需要注意的一些事情是,supervisor显示:
此时,Supervisor和容器仍在运行,这似乎表明主进程启动了一个子进程。由于supervisor仍在运行,我的容器保持运行状态,并且GUI应用程序确实出现了并且我也能够使用它。当我关闭GUI时,supervisor报告:
Supervisor仍在运行,导致容器不会关闭。因此,我必须CTRL-C来杀死supervisor。我不想使用supervisor,但如果必须使用,我希望supervisor在该子进程结束时优雅地关闭自身。如果我能够找到方法让我的容器或supervisor跟踪主进程的子进程,那么我认为这个问题将得到解决。
docker run --name testcontainer testimage
命令,它会开始处理,但会突然停止。然后我检查docker ps
来确认没有容器在运行。然后我检查docker ps -a
,并可以看到它以状态码exit(0)
退出。然后,如果我运行命令docker start testcontainer
,它似乎会再次启动ENTRYPOINT
命令,这次它能够继续进行,GUI就会弹出。我的最佳猜测是,当我运行
docker run
命令时,该进程会开始运行,但可能被派生为后台进程,导致容器退出,因为前台进程已经结束。虽然这可能完全不准确,因为你会认为docker start
命令会产生相同的结果。我考虑尝试强制该进程保持在前台,但不知道如何实现。有什么建议吗?更新:我编辑了我的Dockerfile,使用supervisord管理GUI应用程序的启动。现在,我的docker run命令将启动supervisor,supervisor再启动我的GUI应用程序,它可以工作。关于这个问题需要注意的一些事情是,supervisor显示:
INFO spawned: myguiapp with pid 7
INFO success: myguiapp entered RUNNING state
INFO: exited: myguiapp (exit status 0; expected)
此时,Supervisor和容器仍在运行,这似乎表明主进程启动了一个子进程。由于supervisor仍在运行,我的容器保持运行状态,并且GUI应用程序确实出现了并且我也能够使用它。当我关闭GUI时,supervisor报告:
CRIT reaped unknown pid 93
Supervisor仍在运行,导致容器不会关闭。因此,我必须CTRL-C来杀死supervisor。我不想使用supervisor,但如果必须使用,我希望supervisor在该子进程结束时优雅地关闭自身。如果我能够找到方法让我的容器或supervisor跟踪主进程的子进程,那么我认为这个问题将得到解决。