docker compose run
描述 | 在一个服务上运行一次性命令 |
---|---|
用法 | docker compose run [OPTIONS] SERVICE [COMMAND] [ARGS...] |
描述
针对一个服务运行一次性命令。
以下命令启动 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 | 禁用伪终端分配(默认:自动检测) |
--no-deps | 不启动链接的服务 | |
-p, --publish | 将容器的端口发布到主机 | |
--pull | 策略 | 运行前拉取镜像("always"|"missing"|"never") |
-q, --quiet | 不在 STDOUT 输出任何内容 | |
--quiet-build | 抑制构建过程中的进度输出 | |
--quiet-pull | 拉取时不打印进度信息 | |
--remove-orphans | 移除 Compose 文件中未定义的服务的容器 | |
--rm | 容器退出时自动移除 | |
-P, --service-ports | 运行命令时启用服务的所有端口并映射到主机 | |
--use-aliases | 在容器连接的网络中使用服务的网络别名 (useAliases) | |
-u, --user | 以指定的用户名或 UID 运行 | |
-v, --volume | 绑定挂载卷 | |
-w, --workdir | 容器内的工作目录 |