【问题标题】:Docker-compose : prevent PECL install from stopping the build processDocker-compose:防止 PECL 安装停止构建过程
【发布时间】:2021-02-22 06:07:38
【问题描述】:

所以我有 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”)所以对我来说这不是一个可行的生产选项.

此外,apt-get 和 docker-php-ext-install 也无法使用 Xdebug。我被 PECL 困住了。

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

问候,

【问题讨论】:

    标签: php docker dockerfile xdebug pecl


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。老实说,我以前从未接触过 Dockerfile。我必须处理我同事所做的现有事情。这就是为什么我想从他的文件中扩展并添加我的测试内容......
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 感谢Frederick's answer 用于 bash 逻辑方法,但如果我们从 Dockerfile RUN 命令运行它,我们希望该逻辑运算符在它已经安装时返回成功,否则你的docker build 将失败。
    • 事实上,经过这么长时间,我终于说服团队从头开始重写 dockerfile。同时,Frederick 的方法非常适合临时修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多