docker compose 运行

描述在服务上运行一次性命令
用法docker compose run [OPTIONS] SERVICE [COMMAND] [ARGS...]

描述

对服务运行一次性命令。

以下命令启动webservice 并运行bash作为其命令:

$ docker compose run web bash

您在新容器中运行时使用的命令开始,其配置由服务的配置定义, 包括卷、链接和其他详细信息。但是,有两个重要的区别:

首先,传递的命令run覆盖服务配置中定义的命令。例如,如果web服务配置以bash然后docker compose run web python app.py将其替换为python app.py.

第二个区别是docker compose run命令不会创建 service 配置。这可以防止端口与已打开的端口发生冲突。如果您确实需要该服务的端口 要创建并映射到主机,请指定--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 命令首先检查链接服务是否正在运行 如果服务已停止,则启动服务。所有链接服务都运行后,运行将执行命令 通过了它。例如,您可以运行:

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

这将为链接的db容器。

如果您不希望 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禁用伪 TTY 分配(默认值:自动检测)
--no-deps不要启动链接服务
-p, --publish将容器的端口发布到主机
--quiet-pull拉取而不打印进度信息
--remove-orphans删除 Compose 文件中未定义的服务的容器
--rm容器退出时自动删除容器
-P, --service-portsRun command 启用所有服务的端口并映射到主机
--use-aliases在容器连接到的网络中使用服务的网络 useAliases
-u, --user以指定的 username 或 uid 运行
-v, --volume绑定挂载卷
-w, --workdir容器内的工作目录