重新启动现有 docker 容器时如何指向初始运行时
Posted
技术标签:
【中文标题】重新启动现有 docker 容器时如何指向初始运行时【英文标题】:How to point to initial runtime when restarting an existing docker container 【发布时间】:2019-12-29 11:44:36 【问题描述】:我想在退出并重新启动后重新启动一个 docker 容器,并使用最初创建它时使用的相同运行时。
这是我到目前为止所做的。
创建容器:
sudo docker run --runtime=nvidia [...]
退出容器并重启后重启Docker:
service docker restart
重启之前创建的容器:
sudo docker start my_container
重新打开容器。
docker exec -it my_container [...]
随后在容器中启动的程序未按预期使用 Nvidia GPU。而是使用系统 CPU。
任何帮助将不胜感激。
【问题讨论】:
同一个运行时是什么意思?你的意思是你需要你的 docker 容器在系统重启/启动时运行,甚至在 docker 服务重启时运行? 我希望在重新启动的容器中运行命令时使用 nvidia GPU。 您的意思是 docker run 的--runtime=nvidia
选项应该始终有效并指向 nvidia 运行时?
并非总是如此,仅适用于使用 --runtime=nvidia
选项创建的特定容器。我可能缺少一个关于 Docker 的概念,但是当我第一次创建容器(使用 run
命令)时,我在其中启动的程序使用 nvidia GPU 执行,当我退出容器然后重新打开时情况并非如此使用exec
命令。
碰巧只有在系统重启时才会出现问题。如果我只是简单地stop
容器然后start
再次使用它,则仍然使用 nvidia GPU。我猜运行时在重新启动时未注册。
【参考方案1】:
我通过使用--restart=unless-stopped
策略创建一个新容器得到了预期的结果,该策略允许 Docker 在重启 Docker 服务时自行重启容器。在这个过程中,似乎比我使用的start
/exec
序列要做的更多。
【讨论】:
以上是关于重新启动现有 docker 容器时如何指向初始运行时的主要内容,如果未能解决你的问题,请参考以下文章
如何更改在 DOCKER 容器内运行的 apache 的 httpd.conf 并重新启动 apache