docker vnc第二次连接问题

docker vnc第二次连接问题,docker,vnc,vnc-viewer,Docker,Vnc,Vnc Viewer,我创建了一个docker图像。然后我使用命令dockerrun-d-p5901:5901-p2222:22dockerimagename运行它。Docker跑得很好。在此之后,我使用0.0.0.0:5901连接到vnc。它连接正确,我得到一个图形用户界面 现在,我使用docker stop containerId停止docker。现在,如果我尝试使用命令docker start containerId重新运行容器,docker会出现,但当我尝试使用0.0.0.0:5901连接到vnc时,它会显示

我创建了一个docker图像。然后我使用命令
dockerrun-d-p5901:5901-p2222:22dockerimagename
运行它。Docker跑得很好。在此之后,我使用
0.0.0.0:5901
连接到vnc。它连接正确,我得到一个图形用户界面

现在,我使用
docker stop containerId
停止docker。现在,如果我尝试使用命令
docker start containerId
重新运行容器,docker会出现,但当我尝试使用
0.0.0.0:5901
连接到vnc时,它会显示connect closed出人意料地关闭


我正在使用此图像

它看起来像是Tyrian/android sdk VNC图像中的VNC服务器第二次启动的方式不同,因为容器停止时会留下一个锁文件

如果我从该映像创建并启动一个容器,下面是vncserver-stderr.log显示的内容

▸ ~ docker run -d -p 5901:5901 -p 2222:22 --name android-sdk-vnc thyrlian/android-sdk-vnc
212b6de3d3ee71f221e7e190baaf650b779cf351a9c4654db19ef3402cdaa86f
▸ ~ docker exec android-sdk-vnc cat /var/log/supervisord/vncserver-stderr.log
xauth:  file /root/.Xauthority does not exist

New 'X' desktop is 212b6de3d3ee:1

Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/212b6de3d3ee:1.log
▸ ~ docker stop android-sdk-vnc
android-sdk-vnc
▸ ~ docker start android-sdk-vnc
android-sdk-vnc
▸ ~ docker exec -it android-sdk-vnc cat /var/log/supervisord/vncserver-stderr.log
xauth:  file /root/.Xauthority does not exist

New 'X' desktop is 212b6de3d3ee:1

Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/212b6de3d3ee:1.log


Warning: 212b6de3d3ee:1 is taken because of /tmp/.X1-lock
Remove this file if there is no X server 212b6de3d3ee:1

New 'X' desktop is 212b6de3d3ee:2

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/212b6de3d3ee:2.log
在停止和启动同一个容器之后,下面是日志显示的内容

▸ ~ docker run -d -p 5901:5901 -p 2222:22 --name android-sdk-vnc thyrlian/android-sdk-vnc
212b6de3d3ee71f221e7e190baaf650b779cf351a9c4654db19ef3402cdaa86f
▸ ~ docker exec android-sdk-vnc cat /var/log/supervisord/vncserver-stderr.log
xauth:  file /root/.Xauthority does not exist

New 'X' desktop is 212b6de3d3ee:1

Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/212b6de3d3ee:1.log
▸ ~ docker stop android-sdk-vnc
android-sdk-vnc
▸ ~ docker start android-sdk-vnc
android-sdk-vnc
▸ ~ docker exec -it android-sdk-vnc cat /var/log/supervisord/vncserver-stderr.log
xauth:  file /root/.Xauthority does not exist

New 'X' desktop is 212b6de3d3ee:1

Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/212b6de3d3ee:1.log


Warning: 212b6de3d3ee:1 is taken because of /tmp/.X1-lock
Remove this file if there is no X server 212b6de3d3ee:1

New 'X' desktop is 212b6de3d3ee:2

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/212b6de3d3ee:2.log
我不熟悉这个VNC服务器,但我猜
/tmp/.X1 lock
上的锁文件阻止它以与第一次相同的方式运行


我建议在源GitHub存储库中提交一个问题。您可以在源代码存储库的旁边找到它。

这听起来像是图像出了问题。它不是按照你想要的方式处理容器。如果需要更多帮助,您需要共享您的Dockerfile或图像。我正在使用此图像“”感谢@Naman使用此图像。问题正是@King Chung Huang所解决的(请在他的回答下查看我的评论)。实际上,每次停止容器时都应该删除两个锁文件。我现在尝试
trap SIGTERM
,并做一些清理工作来删除那些锁定文件。可以查看代码更改。很快,我将发布一个包含此修复的新图像。请试一试。非常感谢。顺便说一句,理想情况下,无论何时您想要在Android仿真器上运行任何测试,都应该确保它处于干净状态。这就是为什么建议每次启动一个新容器,而不是使用
docker-stop
。尽管如此,我还是解决了这个问题,因为我相信你可能还有其他原因来解释这个案子。是的,这就是问题所在。当我用vnc绘制一个不同的docker图像时,我想到了这一点。谢谢你的回答。实际上,该问题是由锁文件引起的。实际上,除了您所处理的锁文件:
/tmp/.X1 lock
,还有另一个:
/tmp/.X11 unix/X1
。为了解决这个问题,必须删除两个锁文件。我已经在我的代码库中修复了这个问题,再次感谢。