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