【问题标题】:How can I update the composer version that is being used inside my ddev containers?如何更新在我的 ddev 容器中使用的作曲家版本?
【发布时间】:2020-06-03 19:41:17
【问题描述】:

目前我的 docker/ddev 设置正在容器内运行 Composer 版本 1.10.6 2020-05-06。

我想让容器内的 composer 版本为 1.10.7 2020-06-03。

我找到了一种方法:ddev exec sudo composer self-update,但这不是永久性的。 ddev 重新启动后,容器恢复为使用 1.10.6。

在我的所有搜索中,我都找不到更新创建容器的文档的方法,因此它们会永久更新作曲家。我不需要它在每次启动容器时都尝试更新,我只需要现在能够告诉它永久更改为我想要的版本。

附加部分:将RUN sudo composer self-update 添加到 .ddev/web-build/Dockerfile 会使其每次都尝试更新,这并不理想。我想在准备好后更新,因为我还需要更新我的测试服务器以匹配版本。

我将该命令添加到我的 Dockerfile 并更新到 1.10.7。我从 Dockerfile 中删除了该命令,以便每次重新启动 ddev 时它都不会更新。当我重新启动 ddev(在 Dockerfile 中没有该命令)时,它将 composer 恢复到 1.10.6。

在哪里获得使用该版本的说明?我需要找到它并告诉它改用 1.10.7。我不希望它每次都更新自己ddev restart

【问题讨论】:

  • 我对 ddev 不熟悉,但我认为您所做的是基于 Dockerfile。如果是这样,你可以在那里做composer self-update,这样当你重建图像时,你会得到最新版本吗?
  • halfer,肯定是的。但是每次构建容器时它都会更新。我想选择何时更新。例如,我们最近在测试服务器上更新了 composer 版本,因此也想为本地环境更新它。但是,如果我让本地环境在每次容器启动时自动更新,它将最终领先于我们的服务器。我希望能够为容器设置版本而不是自动更新。这甚至可能吗?
  • 我想我要说的和rfay的评论一样——除非ddev有什么特别之处,否则你只需要在需要更新时重建你的Docker镜像。否则,只需使用现有的(开发环境)或从注册表中提取它(干净的持续集成环境)。
  • 出于好奇:即使我完全理解使用最新版本总是一个好主意,但有什么好的理由这样做吗?即使您现在构建容器,添加最新可用版本的 Composer,这也会过时,因此需要重新构建。另一方面。你从中得到什么?有什么东西在 1.10.6 中不起作用,但在 1.10.7 中修复了吗?
  • Nico,在这种特殊情况下,我们升级了其中一台服务器上的 composer 来修复错误,因此需要更新我们的本地环境以保持一切匹配。这就是为什么我想指定我的版本而不是在那之后继续更新。我们不想继续更新只是为了更新,而只是因为我们有一个理由。

标签: docker composer-php ddev


【解决方案1】:

这通常并不重要,但您可以添加一个包含以下内容的 .ddev/web-build/Dockerfile:

ARG BASE_IMAGE
FROM $BASE_IMAGE
RUN composer self-update

并且您的作曲家将在图像构建过程中更新。

【讨论】:

  • 谢谢,rfay。我在关于那件事的问题的底部添加了另一段。如果我将它添加到我的 Dockerfile 中,它会每次都检查更新,据我所知。我不希望它自动更新,因为我还需要确保我的服务器与本地环境的版本相同。我想我还是被困住了。
  • 不,.ddev/web-build/Dockerfile 仅在您第一次启动项目时构建(直到您升级 ddev)。这就是它的伟大之处。试一试,你没有什么可失去的:)
  • 哦,听起来不错。它怎么知道现在在我的项目中间重建它,因为我将该行添加到底部?因为文件改变了,会重建吗?
  • 是的,每次您以任何方式更改 Dockerfile 都会重建。
  • 谢谢rfay!我真的很感谢你在整个过程中一直支持我。
【解决方案2】:

Randy 的建议对我来说效果很好,但我也找到了一种替代解决方案,它涉及的输入更少。
阅读项目 config.yaml,它解释了如何更改 Composer 版本。
该文件位于 ~/yourprojectname/.ddev/config.yaml。
文件的第一行是使用的配置,文件的其余行解释了可用的配置选项。享受 :)
# if composer_version:"" 它将使用当前的 ddev 默认作曲家版本。
# 也可以设置为“1”,获取最新的 composer v1
# 或 "2" 表示最新的作曲家 v2。
# 可以设置为任何现有的特定作曲家版本。
# 在第一个项目 'ddev start' 之后,它不会被更新,直到它改变

【讨论】:

  • 这看起来像我需要的。 :)
猜你喜欢
  • 2018-04-09
  • 2020-01-16
  • 2016-04-30
  • 2013-03-18
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 2022-10-09
  • 1970-01-01
相关资源
最近更新 更多