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。

您知道执行“如果可以的话安装,否则就可以滚动”之类的任何选项(例如某些隐藏的参数)吗?

此致

解决方法

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

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

但是说实话,“它不会从头开始重建所有内容”听起来很奇怪,您可能应该调试Dockerfile。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...