假设您之前已经创建了一个 Docker 容器并使用过它。现在,您已经停止了容器。因此,容器处于退出状态。如果要在容器内运行命令怎么办?
通常,可以有两种情况。使用 Docker stop 命令停止容器或容器当前正在后台运行。在这种情况下,您可以重新启动容器,访问它的 bash,然后执行您想要的任何命令。这对于未运行的容器来说是完美的。另一种解决方案是使用 Docker exec 命令在主动运行的容器中运行命令。
对于已停止的容器,您还可以使用 Docker start 命令启动容器,然后运行 Docker exec 命令。让我们一一查看所有这些场景。
让我们使用 Docker run 命令创建一个容器。
$ docker run -it --name=myubuntu ubuntu:latest bash
此命令将创建一个名为 ubuntu 的 ubuntu 容器,并将打开容器的 bash,这将允许您在正在运行的容器内执行命令。
您可以通过列出容器来检查容器的状态。
$ docker ps -a
此命令将列出本地计算机中的所有现有容器及其当前状态。
现在,执行下面提到的 Docker stop 命令来停止容器。
$ docker stop myubuntu
如果现在执行 Docker ps 命令,你会发现 myubuntu 容器的状态现在已经变成了 exited。现在,如果你想在这个停止的容器中运行命令,你必须首先启动容器并使用以下命令附加一个 bash。
$ docker start -ai myubuntu
此命令将再次启动容器,您将可以访问容器的 bash。您可以在此处执行您想要的任何命令。
在 Docker 容器内执行命令的另一种方法是使用 Docker exec 命令。但是,您只能在处于运行状态的容器上使用 Docker exec 命令。
让我们使用 Docker run 命令,但使用 detached 选项在后台模式下运行容器。
$ docker run -itd --name=myubuntu ubuntu:latest bash
这将以后台模式运行容器。您可以通过再次列出所有现有容器来检查状态。
$ docker ps -a
现在,让我们使用 Docker exec 命令在容器内创建一个文件。Docker exec 命令的语法是 -
$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
$ docker exec myubuntu touch nhooo.txt
此命令将nhooo.txt在容器的默认工作目录中创建一个名为的文件。您还可以使用 -w (workdir) 标志和 Docker exec 命令来指定要在容器内执行命令的目录的路径。
如果要访问以后台模式运行的容器的 bash,可以使用 -it 选项并提供 /bin/bash 命令。
$ docker exec -it ubuntu /bin/bash
这将打开容器的 bash,您将能够在其中执行命令。如果您希望在下次启动容器时保留更改,请确保在容器内进行更改后,使用 Docker commit 命令提交更改。
Docker commit 命令的语法是 -
$ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
总而言之,在本教程中,您看到了在已经存在的容器中运行命令的两种不同方式。您知道 Docker run 命令用于创建或启动一个新容器,然后在其中执行命令。但是如果你的系统中已经有一个容器并且你想在其中执行命令,你可以使用上面讨论的方法。根据您的容器是停止还是在后台运行,您可以选择上述任何一种方法。