Docker Compose 的 Run 命令允许您为服务执行一次性命令。通过该命令,可以从服务定义的配置中启动一个新的容器,这些配置包括卷、链接及其他相关信息。
语法格式
用法:
Run [选项] [-v 卷…] [-p 端口…] [-e 键=值…] [-l 键=值…]
服务 [命令] [参数…]
选项:
-d, –detach 以后台模式运行,并返回容器名称。
–name NAME 为容器指定一个名称。
–entrypoint CMD 覆盖镜像中的默认入口点。
-e 键=值 设置环境变量,可以多次使用。
-l, –label 键=值 添加或覆盖标签(可多次使用)。
-u, –user=”” 指定运行时的用户。
–no-deps 不启动依赖服务,仅启动指定的服务。
–rm 运行后删除容器,除非以后台模式运行(-d)。
-p, –publish=[] 映射开放端口。
–service-ports 将 Compose 文件中配置的端口进行映射。
–use-aliases 使用网络服务的别名连接容器。
-v, –volume=[] 绑定挂载卷。
-T 禁用 TTY。
-w, –workdir=”” 设置工作目录。
例如,以下命令启动 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
这将运行数据库升级脚本,并在完成后删除容器,即使服务配置中指定了重启策略。
[[[IMG_1]]]
[[[IMG_2]]]
[[[IMG_3]]]
