重新启动现有 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 容器时如何指向初始运行时的主要内容,如果未能解决你的问题,请参考以下文章

如何在Mysql的Docker容器启动时初始化数据库

如何让 Docker 容器在系统启动时自动启动?

如何更改在 DOCKER 容器内运行的 apache 的 httpd.conf 并重新启动 apache

如何查看docker 里某个容器的的启动命令

启动 RabbitMQ Docker 容器时如何添加初始用户?

如何在系统启动时运行 docker-compose up -d?