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

时间:2015-10-11 15:08:35

标签: docker docker-compose

是否有理由使用mysql_real_escape_string()启动run文件,或者只使用docker-compose.yml

我理解up可以启动一个特定的容器,但我指的是你在没有指定容器的情况下使用它的情况,以便它启动你所有的yml容器。

3 个答案:

答案 0 :(得分:92)

docker-compose run中所述:

  

run传递的命令会覆盖服务配置中定义的命令   例如,如果Web服务配置以LaTeX启动,则bash会将其覆盖为docker-compose run web python app.py

     

第二个区别是python app.py命令不会创建服务配置中指定的任何端口
  这可以防止端口与已打开的端口发生冲突。如果您确实希望创建服务端口并将其映射到主机,请指定--service-ports标志:

docker-compose run

因此,除非您有这些特定需求(覆盖命令或在不同端口上只运行一个容器),$ docker-compose run --service-ports web python manage.py shell (即使对于一个容器)也足够了。

  

您能帮忙解释为什么或何时不想创建端口?这就是他们可能与已经开放的端口发生冲突的原因

只是因为docker-compose up为您的服务运行一次性命令 这意味着,如果您已经执行docker-compose run,则所有容器都已在docker-compose up的指定端口上运行。
在此阶段执行docker-compose.yml(执行一次性命令),如果它尊重同一端口,将立即失败。因此默认不创建这些端口。

另一个用例(在Compose environment variables reference中):

  

要查看服务可用的环境变量,请运行docker-compose run

答案 1 :(得分:17)

我想指出,如果你将Python与pdb调试器一起使用:

import pdb; pdb.set_trace()

如果您使用以下命令执行脚本,它将不会删除到shell:

docker-compose up

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

docker-compose run

答案 2 :(得分:0)

docker docs有一个答案。

  

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

     

docker-compose run命令用于运行“一次性”或“临时”   任务。它需要您要运行的服务名称,并且只会启动   运行服务所依赖的服务的容器。使用run   运行测试或执行管理任务,例如删除或   将数据添加到数据卷容器。 run命令的行为类似于   docker run -ti的原因在于它打开了一个指向   容器并返回与出口状态匹配的出口状态   在容器中处理。