在可能已停止的容器上运行docker exec,以便它可以无错误地执行

时间:2017-04-24 16:59:21

标签: docker

我想在某些可能已停止的docker容器上运行docker exec

可能我的意思是它可能运行得很好但在某些情况下,即服务器重启等等,我想要运行docker exec的容器将被停止。

有没有什么好方法可以确保docker exec在两种情况下都能正常执行(容器运行,容器停止)。如果停止不会返回:

Error response from daemon: Container is not running

2 个答案:

答案 0 :(得分:1)

来自docker exec --help

你可以找到,除其他外

Run a command in a running container

我不知道你想用停止的容器做什么?

也许尝试重新启动它?

您知道可以使用重启策略启动容器以始终

参见文档

https://docs.docker.com/engine/reference/run/

提取

Always restart the container regardless of the exit status. When you specify always, the Docker daemon will try to restart the container indefinitely. The container will also always start on daemon startup, regardless of the current state of the container.

答案 1 :(得分:1)

您无法对已停止的容器运行docker exec。来自docker help exec

  

$ docker help exec

     

用法:docker exec [OPTIONS] CONTAINER COMMAND [ARG ...]

     

正在运行的容器

中运行命令

因此,如果您的目标容器由于某种原因而被停止,则需要先docker start <your_container>启动它,然后才能执行docker exec ....

BTW,docker run命令有一个名为--restart的选项,可让您为容器指定重启策略,您可以在docker run --restart docs找到更多详细信息。有4个可用的政策:

  • :退出时不要自动重启容器。这是默认设置。

  • on-failure [:max-retries] :仅当容器以非零退出状态退出时才重新启动。 (可选)限制Docker守护程序尝试的重新启动重试次数。

  • 始终:无论退出状态如何,始终重新启动容器。当您指定always时,Docker守护程序将尝试无限期地重新启动容器。无论容器的当前状态如何,容器也将始终在守护程序启动时启动。

  • 除非停止:无论退出状态如何,始终重启容器,但如果容器之前已经处于停止状态,则不要在守护程序启动时启动容器。

默认情况下no,您可以根据自己的要求选择另一个。例如,如果选择non-stopped,则在服务器重新启动后,当docker守护程序准备好后,您的容器将自动重启。