Docker-compose : 防止 PECL 安装停止构建过程

Docker-compose : prevent PECL install from stopping the build process

所以我有 2 个 Dockerfile 来构建我的容器。第一个文件用于构建我的“主”(生产)容器,第二个文件扩展第一个(通过 From 指令)并添加一些开发和测试依赖项。

目前,我唯一的测试依赖是 Xdebug。我通过 PECL 安装它:RUN pecl install xdebug && docker-php-ext-enable xdebug

当我重建我的形象时,它似乎并没有从头开始重建一切,所以我收到错误 pecl/xdebug is already installed and is the same as the released version 2.9.8 install failed ERROR: Service 'webapi' failed to build : The command '/bin/sh -c pecl install xdebug && docker-php-ext-enable xdebug' returned a non-zero code: 1

好吧,它失败了,但我仍然安装了 Xdebug,这样我的图像就可以正常工作了。但它停止了构建。我不想。

我见过 RUN command; exit 0 技巧,但是,正如有人提到的,它会消除任何真正的错误(比如“抱歉,服务器无法访问,无法下载 Xdebug”)所以对我来说这不是生产的可行选择。

此外,Xdebug 在 apt-get 上或通过 docker-php-ext-install 均不可用。我坚持使用 PECL。

你知道任何选项(比如一些隐藏的参数)来做一些像“如果可以就安装,否则就像它一样滚动”之类的东西吗?

此致,

您可以先检查是否安装了Xdebug:

bash -c '[[ -z "$(pecl list | grep xdebug)" ]] && (pecl install xdebug && docker-php-ext-enable xdebug)'

但老实说,“它不会从头开始重建一切”一开始听起来很奇怪,您可能应该调试 Dockerfile。

当你想安装 XDebug 时,把这个放在你的 Dockerfile 中:

RUN bash -c '[[ -n "$(pecl list | grep xdebug)" ]]\
 || (pecl install xdebug && docker-php-ext-enable xdebug)'

这将在尝试安装之前检查 'xdebug' 的 pecl 安装包列表。

  • 如果 grep return 对此有任何帮助,我们知道它已经安装并且语句评估为成功。
  • 如果 grep 没有 return 任何东西,它会继续执行安装 xdebug 的命令,如果无法安装则失败。