整个故事:
通常,我使用docker ps
检查容器状态以查看是否重新启动了容器。
最近,我在Windows10中安装了一台hyper-v机器,还在此hyper-v机器中安装了ubuntu18.04。同时,我在此ubuntu18.04中安装了docker。
我在这个ubuntu18.04中添加了一些容器,然后在睡觉前直接关闭了Windows10 pc。
某天以后,当我再次想起这个东西时,我启动了win10 pc,使用ssh到这台虚拟机,然后执行以下操作:
cake@cake:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ac07c24c537 wordpress "docker-entrypoint.s…" 5 days ago Up 5 days 0.0.0.0:8080->80/tcp gg_wordpress_1
3c47669c927f mysql:5.7 "docker-entrypoint.s…" 5 days ago Up 5 days 3306/tcp, 33060/tcp gg_db_1
问题:
您可以看到5天前创建的容器,可以,但是STATUS
显示容器已经用了5天。
我确定这5天我已经关闭了Windows10 pc,与此同时,找到上述内容之后,我还关闭了win10,以检查是否可以访问一项容器服务的8080
?(结果是可以确保无法访问)。然后,我重新启动win10 pc,再次执行docker ps
,假设STATUS
类似于1 second ago
,但仍然是5 days ago
。
注意::不建议使用docker for windows with MobyLinuxVM in hyperv
,我只是想知道为什么会发生我的问题。
更新:
正如我在评论中所说:
如果在bash中执行
uptime
,它将显示:20:57:41 up 1 day, 2:23, 1 user, load average: 0.00, 0.00, 0.00
我有一种情况可以解释这一点:暂停hyper-v。这将使VM暂停,同时uptime
停止计数,但是docker ps
仍不停止计数,它只是实时计数。不知道为什么。
所以,我的情况可能是下一个:
a)5天前,我启动了容器。
b)4天前,我暂停了VM(不确定,也许其他操作与此类似)
c)刚才,对于某些不确定的操作,虚拟机未暂停。
d)然后,我可以uptime
看到虚拟机启动了1天;但使用docker ps
仍能看到该容器5天。
e)在这五天中,我当然没有关闭虚拟机;我只是不仅一次关闭了Windows10物理机。但这似乎并不影响虚拟linux机器的时间计数器。
因此,似乎直接关闭win10机器并不会影响hyper-v linux虚拟机的时间计数器。
换句话说:如果绕过VM暂停,如果我们直接关闭win10。然后,尽管hyper-v VM中的服务也会中断,但是当win10&hyper-v VM linux返回时,VM的行为就像永不停止一样,uptime
也会在hyper-v VM停止期间进行计数。现在看来,我的问题仅限于这种Hyper-V行为。
任何人都可以解释这种hyper-v行为吗?