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, --interactive | true | 即使未連線也保持 STDIN 開啟 |
-l, --label | 新增或覆蓋標籤 | |
--name | 為容器分配一個名稱 | |
-T, --no-TTY | true | 停用偽 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 | 容器內的工作目錄 |