Docker-Compose run命令可以针对服务运行一次性命令,使用run命令可以从具有由服务定义的配置的新容器中启动,包括卷,链接和其他详细信息。
语法格式
Usage:
run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] [-l KEY=VALUE...]
SERVICE [COMMAND] [ARGS...]
Options:
-d, --detach 后台运行,输出容器名.
--name NAME 到容器中分配一个名称
--entrypoint CMD 覆盖镜像的入口点。
-e KEY=VAL 设置环境变量参数,可以使用多次
-l, --label KEY=VAL 添加或覆盖一个标签(可以多次使用)
-u, --user="" 指定运行的用户
--no-deps 不启动link服务,只启动run的服务.
--rm 运行后删除容器,后台运行模式除外(-d).
-p, --publish=[] 开放端口
--service-ports compose文件中配置什么端口,就映射什么端口.
--use-aliases 使用网络服务的网络别名(s)容器连接。
-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命令首先检查链接服务是否正在运行,并在停止时启动该服务。一旦所有链接的服务都在运行,则runexec将执行您传递的命令。例如,您可以运行:
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
这将运行数据库升级脚本,并在完成运行后删除容器,即使在服务配置中指定了重新启动策略也是如此。