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

新手上路,请多包涵

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

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

原文由 Raif 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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 的指定端口上运行。

在这个阶段(执行一次性命令)执行 docker-compose run ,如果它尊重同一个端口,将立即失败。因此默认不创建这些端口。


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

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


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

原文由 VonC 发布,翻译遵循 CC BY-SA 4.0 许可协议

docker docs 有一个答案。

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

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

原文由 Jay 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题