Answers:
如docker-compose run
(2015)中所述
运行传递的命令将覆盖服务配置中定义的命令。
例如,如果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
因此,除非您有这些特定需求(覆盖命令或仅在不同端口上运行一个容器),否则docker-compose up
(即使对于一个容器)也足够。
您能帮助解释为什么或何时不希望创建端口吗?这就是为什么或它们可能与已经打开的端口冲突的原因
仅仅是因为docker-compose run
它可以为您的服务运行一次性命令。
这意味着,如果您已经执行过a docker-compose up
,则所有容器都已经在从的指定端口上运行docker-compose.yml
。
如果docker-compose run
在此阶段执行a(一次执行命令),如果它遵循相同的端口,则将立即失败。因此,默认情况下不创建这些端口。
另一个用例(在Compose环境变量参考中):
要查看哪些环境变量可用于服务,请运行
docker-compose run SERVICE env
。
这些命令的最新(2019+)版本在docker/docker.github.io
:
docker docs有一个答案。
通常,您需要
docker-compose up
。使用up
启动或重新启动所有定义的服务docker-compose.yml
。在默认的“附加”模式下,您将看到来自所有容器的所有日志。在“分离”模式(-d
)中,启动容器后Compose退出,但是容器继续在后台运行。该
docker-compose run
命令用于运行“一次性”或“临时”任务。它要求您要运行的服务名称,并且仅启动正在运行的服务所依赖的服务的容器。使用run
运行测试或执行管理任务,如删除或添加数据的数据量的容器。该run
命令的行为类似于docker run -ti
,它打开了容器的交互式终端,并返回与容器中进程的退出状态匹配的退出状态。
docker-compose run
对正在运行的服务执行命令,并docker-compose up
生成新服务。