php - 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 时,把它放在你的 Dockerfile 中:
RUN bash -c '[[ -n "$(pecl list | grep xdebug)" ]]\
|| (pecl install xdebug && docker-php-ext-enable xdebug)'
这将在尝试安装之前检查 pecl 已安装软件包列表中的“xdebug”。
- 如果 grep 为此返回任何内容,我们就知道它已经安装并且该语句评估为成功。
- 如果 grep 没有返回任何内容,它将继续执行安装 xdebug 的命令,如果无法安装则失败。
推荐阅读
- math - Aruco 地标变换 3D 矩阵
- css - Chrome上的剪辑路径在边缘留下一条奇怪的线
- javascript - 在 Firestore 中更新查询
- perl - Perl 查找或读取并丢弃结果
- sql-server - 使用周末前周五的日期字段生成数据提取
- node.js - 如何从分叉的子进程中捕获错误?
- java - 如何在 Java 中使用“Startswith”的变量查找文件
- c++ - 2个独立数据结构的迭代器
- azure - 使用 docker-compose 将 azure 容器注册表映像部署到 azure Web 应用程序中
- javascript - @media 打印的 CSS 页码