如何在一個已存在的 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 命令用於建立或啟動新容器,然後在其中執行命令。但是,如果您已經在系統中擁有一個容器並希望在其中執行命令,則可以使用上述方法。根據您的容器是已停止還是在後臺執行,您可以選擇上述任何一種方法。

更新於:2021-08-06

4K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告