错误 pecl install oci8-2.2.0 - 尝试使用芯片硅 (M2) 在苹果上构建容器

Error pecl install oci8-2.2.0 - Try to build container on apple with chip silicon (M2)

提问人:Geoff Oliver 提问时间:6/9/2023 最后编辑:Nico HaaseGeoff Oliver 更新时间:6/25/2023 访问量:228

问:

我在这个问题上度过了一天,docker文件在Windows上完美运行。 当我启动docker-compose时,出现以下错误:

'=> 错误 [web 11/54] RUN echo 'instantclient,/usr/lib/oracle/21.1/client64/lib' |pecl 安装 oci8-2.2.0 7.0s

[网页 11/54]运行 echo 'instantclient,/usr/lib/oracle/21.1/client64/lib' |pecl 安装 oci8-2.2.0: #0 0.201 #0 0.201 注意:尝试访问第 187 行 PEAR/REST.php 中 bool 类型值的数组偏移量

#0 0.201 PHP 注意:
尝试在第 187 行的 /usr/share/php/PEAR/REST.php 中访问类型 bool 值的数组偏移量 #0 0.201 PHP 堆栈跟踪: #0 0.201 菲律宾比索 1.{主要}() /usr/share/php/peclcmd.php:0 #0 0.201 菲律宾比索 2.require_once() /usr/share/php/peclcmd.php:31 #0 0.201 菲律宾比索 3.PEAR_Command_Install->运行() /usr/share/php/pearcmd.php:316 #0 0.201 菲律宾比索 4.PEAR_Command_Install->doInstall() /usr/share/php/PEAR/Command/Common.php:270 #0 0.201 菲律宾比索 5.PEAR_Downloader->download() /usr/share/php/PEAR/Command/Install.php:666 #0 0.201 菲律宾比索 6.PEAR_Downloader_Package->initialize() /usr/share/php/PEAR/Downloader.php:296 #0 0.201 菲律宾比索 7.PEAR_Downloader_Package->_fromString() /usr/share/php/PEAR/Downloader/Package.php:189 #0 0.201 菲律宾比索 8.PEAR_Downloader->_getPackageDownloadUrl() /usr/share/php/PEAR/Downloader/Package.php:1706 #0 0.201 菲律宾比索 9.PEAR_REST_10->getDownloadURL() /usr/share/php/PEAR/Downloader.php:870 #0 0.201 菲律宾比索 10.PEAR_REST->retrieveData() /usr/share/php/PEAR/REST/10.php:74 #0 0.201 菲律宾比索 11.PEAR_REST->useLocalCache() /usr/share/php/PEAR/REST.php:80'

'错误结束:#0 6.963 /usr/bin/ld:
搜索 -lclntsh 时跳过不兼容的 /usr/lib/oracle/21.1/client64/lib/libclntsh.so

#0 6.963 /usr/bin/ld:找不到 -lclntsh

#0 6.963 collect2:错误:ld 返回 1 退出状态

#0 6.964 make: *** [Makefile:209: oci8.la] 错误 1

#0 6.969 错误:“make”失败

------

无法解决:进程“/bin/sh -c echo 'instantclient,/usr/lib/oracle/21.1/client64/lib' |pecl install oci8-2.2.0“未成功完成:退出代码:1
我的 Dockerfile 的一部分 `

RUN apt-get update && apt-get upgrade -y && \
  apt-get install -y \
  curl \
  git \
  nano \
  apache2 \
  php \
  php-cli php-curl php-gd php-iconv php-imap php-mbstring php-pgsql php-xsl php-zip php-xdebug php-imagick\
  php-dev php-pear build-essential libaio1 php-mailparse php-bcmath\
  libapache2-mod-php \
  postgresql-client \
  unzip \
  zip \
  xsltproc \
  libxml2-utils\
  libmcrypt-dev\
  unixodbc-dev

# Oracle instantclient
ADD docker/conf/oracle/instantclient-basic-linux.x64-21.4.0.0.0dbru.zip /tmp/
ADD docker/conf/oracle/instantclient-sdk-linux.x64-21.4.0.0.0dbru.zip /tmp/
RUN mkdir -p /usr/lib/oracle/21.1/client64
RUN unzip -qq /tmp/instantclient-basic-linux.x64-21.4.0.0.0dbru.zip -d /usr/lib/oracle/21.1/client64
RUN unzip -qq /tmp/instantclient-sdk-linux.x64-21.4.0.0.0dbru.zip -d /usr/lib/oracle/21.1/client64
RUN mv /usr/lib/oracle/21.1/client64/instantclient_21_4 /usr/lib/oracle/21.1/client64/lib
RUN echo /usr/lib/oracle/21.1/client64/lib > /etc/ld.so.conf.d/oracle.conf
RUN pecl channel-update pecl.php.net
RUN echo 'instantclient,/usr/lib/oracle/21.1/client64/lib' | pecl install oci8-2.2.0
RUN echo "extension = oci8.so" >> /etc/php/7.4/cli/php.ini
RUN echo "extension = oci8.so" >> /etc/php/7.4/apache2/php.ini
RUN echo "LD_LIBRARY_PATH=\"/usr/lib/oracle/21.1/client64/lib\"" >> /etc/environment
RUN echo "ORACLE_HOME=\"/usr/lib/oracle/21.1/client64/lib\"" >> /etc/environment
RUN echo "ServerTokens Prod" >> /etc/apache2/apache2.conf
RUN echo "ServerSignature Off" >> /etc/apache2/apache2.conf
RUN echo "export LD_LIBRARY_PATH=\"/usr/lib/oracle/21.1/client64/lib\"" >> /etc/apache2/envvars
RUN echo "export ORACLE_HOME=\"/usr/lib/oracle/21.1/client64/lib\"" >> /etc/apache2/envvars
RUN ldconfig
ADD docker/conf/oracle/php-7.4.3.tar.gz /tmp/
RUN cp -r /tmp/php-7.4.3/ext/pdo_oci /tmp
RUN cd /tmp/pdo_oci && \
    phpize && \
    ./configure --with-pdo-oci=instantclient,/usr/lib/oracle/21.1/client64/lib && \
    make install
  • 我试图删除所有,然后重新安装。
  • 选中桌面 docker 上的框以使用 rosetta。
  • 启动此cmd:softwareupdate --install-rosetta
  • 全部删除,然后使用 Colima 重试

我一直都遇到同样的问题。

php docker pecl oracle-cloud-infrastructure

评论

0赞 A.L 6/10/2023
欢迎使用 Stack Overflow。 看起来很奇怪,我找不到任何这种语法的例子,请分享这段代码的源代码。echo 'instantclient,/usr/lib/oracle/21.1/client64/lib' | pecl install oci8-2.2.0
0赞 Alex Howansky 6/10/2023
这个安装看起来和我使用的几乎一样,我没有看到任何问题。请注意,OCI 模块在编译后不需要 或 env vars 即可工作。我还要指出的是,PHP 7.4.3 和 InstantClient 21.4 都非常老,所以我建议在花时间调试之前至少从 7.4.33 和 21.10 开始。LD_LIBRARY_PATHORACLE_HOME
1赞 Alex Howansky 6/10/2023
@A.L 语法是正确的 -- 将停止并提示手动输入此字符串,因此自动化它的最简单方法是通过 stdin 管道传输它。pecl install oci8
0赞 Geoff Oliver 6/10/2023
谢谢大家。亚历克斯,我试图更改 instantClient,但我有同样的错误。
1赞 Christopher Jones 6/13/2023
你的“FROM”行是什么?您在容器中实际使用什么操作系统?

答:

0赞 Geoff Oliver 6/21/2023 #1

解决 我不确定我的同事是如何解决这个问题的,但是该映像是在服务器上构建的,我使用 .docker-compose pull

因此,构建不再有问题,因为它是预构建的