软件包“pecl.php.net/imagick”没有可用的版本。OpenSSL错误?

No releases available for package "pecl.php.net/imagick". OpenSSL Error?

提问人:Narc0t1CYM 提问时间:6/22/2023 更新时间:7/10/2023 访问量:637

问:

如果这是重复的,我深表歉意,但已经发布的问题的答案都没有帮助我。

最近,我们的 Dockerfile 不想再构建了。它失败的行是 when 正在尝试通过 进行安装。php5.6-apacheimagickpecl

# Enable imagick
RUN apt-get update && apt-get install -y libmagickwand-dev --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN yes '' | pecl install -vvv imagick-beta

由于以下错误,运行此行失败:

 > [12/25] RUN yes '' | pecl -vvv install imagick-beta:
#0 1.354 
#0 1.354 Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
#0 1.354 error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in PEAR/Proxy.php on line 183
#0 1.355 
#0 1.355 Warning: fsockopen(): Failed to enable crypto in PEAR/Proxy.php on line 183
#0 1.357 
#0 1.357 Warning: fsockopen(): unable to connect to ssl://pecl.php.net:443 (Unknown error) in PEAR/Proxy.php on line 183
#0 1.359 No releases available for package "pecl.php.net/imagick"
#0 1.360 Cannot initialize 'channel://pecl.php.net/imagick-beta', invalid or missing package file
#0 1.362 Package "channel://pecl.php.net/imagick-beta" is not valid
#0 1.366 install failed
------
failed to solve: process "/bin/sh -c yes '' | pecl -vvv install imagick-beta" did not complete successfully: exit code: 1

我最近发现的唯一一篇关于有人遇到相同问题的帖子是这个错误报告,但我不确定我会在哪个频道看到任何关于修复这个错误的更新。在错误报告中,最后一个人陈述如下:

证书到期时间设置为昨天。我正在考虑目前全球所有 docker 构建管道都失败了 <3

他指的是SSL证书吗?因为当我检查它时,它看起来有效,所以我不明白为什么它无法连接。php.net

第 183 行如下:PEAR/proxy.php

$fp = @fsockopen($host, $port, $errno, $errstr);

所以如果我理解正确,docker 容器无法通过 ?有没有人遇到过同样的问题?pecl.php.net:443

提前感谢您的任何(建设性)答案!

php docker pecl

评论

0赞 naththedeveloper 9/11/2023
SSL证书今天又过期了,多么好玩..

答:

1赞 Freeman 6/22/2023 #1

正如我所看到的,它表明证书验证失败,要修复它,您可以尝试通过在安装命令之前添加此行来禁用 Dockerfile 中的 SSL 证书验证!SSLpecl

RUN pecl config-set "disable-tls" "yes"

或者,您也可以更新SSLpecl.php.net

祝你好运!

评论

0赞 Narc0t1CYM 6/22/2023
此命令为我抛出另一个错误:无法解决:。在 Docker 环境中如何更新 SSL 证书?process "/bin/sh -c pecl config-set \"disable-tls\" \"yes\"" did not complete successfully: exit code: 1
0赞 Freeman 6/22/2023
@Narc0t1CYM,因为在运行pecl config-set RUN apt-get update && apt-get install -y php-pear
0赞 Freeman 6/22/2023
如果它不再工作,请在 Dockerfile 中的命令之前添加以下行:pecl installpear config-set http:verify false
0赞 Freeman 6/22/2023
并用新的SSL证书文件替换旧的SSL证书文件。例如,您可以使用以下命令将新的 SSL 证书文件复制到容器中docker cpdocker cp new.crt:/etc/ssl/certs/server.crt
1赞 Vitor Savicki 6/24/2023 #2

我能够通过直接从项目的 git 存储库安装包来解决这个问题。

FROM php:7.0-alpine

RUN apk update && apk add --no-cache imagemagick-dev libtool make g++

RUN wget https://github.com/ImageMagick/ImageMagick6/archive/refs/tags/6.9.12-28.tar.gz && \
     tar -xzf 6.9.12-28.tar.gz && \
     cd ImageMagick6-6.9.12-28 && \
     ./configure && \
     make && \
     make install

RUN wget https://pecl.php.net/get/imagick-3.4.4.tgz && \
     tar -xzf imagick-3.4.4.tgz && \
     cd imagick-3.4.4 && \
     phpize && \
     ./configure --with-imagick=/usr/local && \
     make && \
     make install

RUN echo "extension=imagick.so" > /usr/local/etc/php/conf.d/imagick.ini
3赞 Narc0t1CYM 7/3/2023 #3

这是最终使一切正常工作的修复程序:

FROM php:alpine AS cacert

FROM php:7.0-fpm-alpine # Image that the container is actually using

COPY --from=cacert /etc/ssl /root/ssl

RUN mv /etc/ssl/openssl.cnf* /root/ssl && rm -rf /etc/ssl && mv /root/ssl /etc/ssl \
  && pear update-channels \
  && pear upgrade

据我了解,CA证书在旧版本的PHP映像中已过期,需要替换为较新的证书。这可能是一个黑客问题,但它会让你通过,直到旧映像的 CA 证书更新。

评论

1赞 CodeTwice 10/5/2023
像魅力一样工作,修复了我的php:5.6-fpm-alpine容器。