Docker环境下IonCube加载失败问题(Windows转MacOS)
IonCube在MacOS Docker环境中加载失败问题
此前在Windows系统中,以下Dockerfile可正常运行。切换至MacOS系统后,应用程序虽能正常运行,但IonCube始终无法工作,每次都会出现如下错误。已尝试多种排查方式并查阅大量资料,但问题仍未解决:奇怪的是,使用cat命令查看对应目录时,文件确实存在。
错误信息
PHP Warning: Failed loading Zend extension 'ioncube' ( tried: /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ioncube (/usr/local/lib/php/extensions/no-debug-non-zts-20220829/ioncube: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ioncube.so (/usr/local/lib/php/extensions/no-debug-non-zts-20220829/ioncube.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
对应的Dockerfile
# args ARG WP_VERSION=6.6 ARG PHP_VERSION=8.2 # Install WordPress with php version FROM wordpress:${WP_VERSION}-php${PHP_VERSION}-apache # args ARG IONCUBE_VERSION=8.2 # Install xdebug RUN pecl install xdebug && docker-php-ext-enable xdebug # Install IonCube Loader RUN cd /usr/local && mkdir -p /ioncube && cd /ioncube && \ curl -o ioncube.tar.gz https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz && \ tar xvzf ioncube.tar.gz -C /ioncube --strip-components=1 && rm ioncube.tar.gz && \ cp ioncube_loader_lin_${IONCUBE_VERSION}.so ioncube.so && mv ioncube.so `php-config --extension-dir` && \ echo "zend_extension=ioncube" > /usr/local/etc/php/conf.d/docker-php-ext-ioncube.ini # Download packages RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl \ git \ unzip \ libicu-dev \ libgmp-dev # Download composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* ENV COMPOSER_ALLOW_SUPERUSER=1 WORKDIR /var/www/html/wp-content/plugins COPY ./tools ./tools COPY ./tokenico ./tokenico COPY ./tokenico-premium ./tokenico-premium RUN cd ./tools && composer install # Install LTS Node.js RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \ apt-get install -y nodejs # Install wp-cli RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \ chmod +x wp-cli.phar && \ mv wp-cli.phar /usr/local/bin/wp RUN mkdir -p /var/www/html/wp-content/uploads RUN chown -R www-data:www-data /var/www/html/wp-content/uploads # Apache ServerName RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf # Port EXPOSE 80 # Run apache CMD ["apache2-foreground"]
解决方案
- 架构不兼容修复:MacOS若为Apple Silicon(M系列芯片),Docker默认以arm64架构运行容器,原Dockerfile下载的是x86-64版本IonCube,导致无法加载。需修改两处:
- 将IonCube下载链接替换为arm64版本:
curl -o ioncube.tar.gz https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_arm64.tar.gz - 复制对应arm64版本的so文件:
cp ioncube_loader_lin_${IONCUBE_VERSION}_arm64.so ioncube.so
- 将IonCube下载链接替换为arm64版本:
- 指定完整加载路径:修改配置文件,直接写入
ioncube.so的完整路径,避免PHP自动补全出错:echo "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20220829/ioncube.so" > /usr/local/etc/php/conf.d/docker-php-ext-ioncube.ini - 验证容器架构:进入容器执行
uname -m,确认当前架构与IonCube版本匹配。
内容的提问来源于stack exchange,提问作者BeycanDeveloper
相关产品推荐
相关产品推荐

