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