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 shell。

如果您不希望 `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設定環境變數
--env-from-file從檔案設定環境變數
-i, --interactivetrue即使未連線也保持 STDIN 開啟
-l, --label新增或覆蓋標籤
--name為容器分配一個名稱
-T, --no-TTYtrue停用偽 TTY 分配(預設值:自動檢測)
--no-deps不啟動連結服務
-p, --publish將容器的埠釋出到主機
--pull策略執行前拉取映象("always"|"missing"|"never")
-q, --quiet不向 STDOUT 列印任何內容
--quiet-build抑制構建過程的進度輸出
--quiet-pull不列印進度資訊進行拉取
--remove-orphans移除 Compose 檔案中未定義的服務容器
--rm容器退出時自動刪除容器
-P, --service-ports執行命令時啟用所有服務的埠並將其對映到主機
--use-aliases在容器連線到的網路中使用服務的網路別名
-u, --user以指定使用者名稱或 uid 執行
-v, --volume繫結掛載一個卷
-w, --workdir容器內的工作目錄