在可能停止的容器上运行docker exec,以便它可以正确执行

我想在一些可能停止的docker集装箱上运行dockerpipe理器。

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

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

Error response from daemon: Container is not running

docker exec --help

你可以find,除其他事情

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.

您不能运行docker exec对已停止的容器。 从docker help exec

$ docker help exec

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

正在运行的容器中运行命令

所以如果你的目标容器因为某种原因被停止了,你需要通过docker start <your_container>来启动它,然后才能执行docker exec ....

顺便说--restart--restart docker run命令有一个叫做--restart的选项,可以让你指定容器的重启策略,你可以在docker run –restart docs中find更多的细节。 有4个政策可用:

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

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

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

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

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