我应该使用docker-compose up还是运行它?


129

有没有使用run启动docker-compose.yml文件的理由,还是应该使用up

我了解这run可以启动特定的容器,但是我指的是您在不指定容器的情况下使用它的情况,以便它启动所有yml容器。

Answers:


141

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


27

我想指出的是,如果您在pdb调试器中使用Python:

import pdb; pdb.set_trace()

如果使用以下命令执行脚本,它将不会掉到外壳上:

docker-compose up

但是,如果您使用run,它将按预期降到调试器中:

docker-compose run

7

docker docs有一个答案。

通常,您需要docker-compose up。使用up启动或重新启动所有定义的服务docker-compose.yml。在默认的“附加”模式下,您将看到来自所有容器的所有日志。在“分离”模式(-d)中,启动容器后Compose退出,但是容器继续在后台运行。

docker-compose run命令用于运行“一次性”或“临时”任务。它要求您要运行的服务名称,并且仅启动正在运行的服务所依赖的服务的容器。使用run 运行测试或执行管理任务,如删除或添加数据的数据量的容器。该run命令的行为类似于 docker run -ti,它打开了容器的交互式终端,并返回与容器中进程的退出状态匹配的退出状态。


1
这应该是公认的答案。基本上,用于docker-compose run对正在运行的服务执行命令,并docker-compose up生成新服务。
goonerify
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.