我想在某些可能已停止的docker容器上运行docker exec
。
可能我的意思是它可能运行得很好但在某些情况下,即服务器重启等等,我想要运行docker exec
的容器将被停止。
有没有什么好方法可以确保docker exec在两种情况下都能正常执行(容器运行,容器停止)。如果停止不会返回:
Error response from daemon: Container is not running
答案 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守护程序准备好后,您的容器将自动重启。