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, --interactive | true | 即使未附加也保持 STDIN 開啟 |
-l, --label | 新增或覆蓋標籤 | |
--name | 為容器指定名稱 | |
-T, --no-TTY | true | 停用虛擬終端配置(預設值:自動偵測) |
--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 | 容器內的工作目錄 |