如何在一个已存在的 Docker 容器中运行命令?
假设您之前已经创建了一个 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 tutorialspoint.txt
此命令将在容器的默认工作目录中创建一个名为 tutorialspoint.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 命令用于创建或启动新容器,然后在其中执行命令。但是,如果您已经在系统中拥有一个容器并希望在其中执行命令,则可以使用上述方法。根据您的容器是已停止还是在后台运行,您可以选择上述任何一种方法。