docker compose run

說明在服務上執行一次性命令
用法docker compose run [選項] 服務 [命令] [參數...]

說明

針對服務執行一次性命令。

以下命令啟動 `web` 服務並以 `bash` 作為其命令執行

$ docker compose run web bash

您使用 `run` 執行的命令會在新容器中啟動,其配置由服務的配置定義,包括磁碟區、連結和其他詳細資訊。但是,有兩個重要的區別

首先,`run` 傳遞的命令會覆蓋服務配置中定義的命令。例如,如果 `web` 服務配置以 `bash` 啟動,則 `docker compose run web python app.py` 會將其覆蓋為 `python app.py`。

第二個區別是 `docker compose run` 命令不會建立服務配置中指定的任何埠。這可以防止與已開啟的埠發生埠衝突。如果您確實希望建立服務的埠並將其映射到主機,請指定 `--service-ports`

$ docker compose run --service-ports web python manage.py shell

或者,可以使用 `--publish` 或 `-p` 選項指定手動埠映射,就像使用 `docker run` 時一樣

$ docker compose run --publish 8080:80 -p 2022:22 -p 127.0.0.1:2021:21 web python manage.py shell

如果您啟動配置了連結的服務,則 `run` 命令會首先檢查連結的服務是否正在執行,如果已停止則啟動該服務。所有連結的服務都啟動後,`run` 會執行您傳遞給它的命令。例如,您可以執行

$ docker compose run db psql -h db -U docker

這將為連結的 `db` 容器開啟一個互動式 PostgreSQL 殼層。

如果您不希望 `run` 命令啟動連結的容器,請使用 `--no-deps` 旗標

$ docker compose run --no-deps web python manage.py shell

如果您希望在執行後移除容器,同時覆蓋容器的重新啟動策略,請使用 `--rm` 旗標

$ docker compose run --rm web python manage.py db upgrade

這將執行資料庫升級腳本,並在執行完成後移除容器,即使服務配置中指定了重新啟動策略。

選項

選項預設值說明
--build在啟動容器之前建置映像
--cap-add新增 Linux 功能
--cap-drop捨棄 Linux 功能
-d, --detach在背景中執行容器並列印容器 ID
--entrypoint覆蓋映像的進入點
-e, --env設定環境變數
-i, --interactivetrue即使未附加也保持 STDIN 開啟
-l, --label新增或覆蓋標籤
--name為容器指定名稱
-T, --no-TTYtrue停用虛擬終端配置(預設值:自動偵測)
--no-deps不要啟動連結的服務
-p, --publish將容器的埠發佈到主機
--quiet-pull拉取映像但不列印進度資訊
--remove-orphans移除 Compose 檔案中未定義服務的容器
--rm容器退出時自動移除
-P, --service-ports執行命令時啟用所有服務的端口並映射到主機
--use-aliases在容器連線的網路中使用服務的網路別名 (network aliases)
-u, --user以指定的使用者名稱或 uid 執行
-v, --volume掛載磁碟區 (volume)
-w, --workdir容器內的工作目錄