小编典典

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

all

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

我知道run可以启动一个特定的容器,但我指的是你使用它而不指定一个容器的情况,以便它启动你所有的 yml 容器。


阅读 38

收藏
2022-08-05

共1个答案

小编典典

docker-compose run(2015)中所述

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

因此,除非您有这些特定需求(覆盖命令或仅在不同端口上运行一个容器),docker-compose up(即使对于一个容器)就足够了。

questionto42的评论中所述,您这样做是为了测试:

不要忘记在--rm之后添加run,否则每次运行时都会创建容器docker-compose run ...,退出后不会被删除。
当您不知道这一点并测试一段时间时,这可能会导致一长串容器。


您能否帮助解释为什么或何时不希望创建端口?这就是它们可能与已经打开的端口发生冲突的原因或时间

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


另一个用例(在Compose
环境变量参考中
):

要查看服务可以使用哪些环境变量,请运行docker-compose run SERVICE env.


这些命令的最新(2019+)版本在docker/docker.github.io

2022-08-05