是否有理由使用mysql_real_escape_string()
启动run
文件,或者只使用docker-compose.yml
?
我理解up
可以启动一个特定的容器,但我指的是你在没有指定容器的情况下使用它的情况,以便它启动你所有的yml容器。
答案 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
的原因在于它打开了一个指向 容器并返回与出口状态匹配的出口状态 在容器中处理。