首页 > 解决方案 > Docker-compose:防止 PECL 安装停止构建过程

问题描述

所以我有 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困住了。

您是否知道任何选项(例如一些隐藏的参数)来执行“如果可以安装,否则就像滚动一样”之类的操作?

问候,

标签: phpdockerdockerfilexdebugpecl

解决方案


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

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

这将在尝试安装之前检查 pecl 已安装软件包列表中的“xdebug”。

  • 如果 grep 为此返回任何内容,我们就知道它已经安装并且该语句评估为成功。
  • 如果 grep 没有返回任何内容,它将继续执行安装 xdebug 的命令,如果无法安装则失败。

推荐阅读