无法使用Alpine镜像部署PHP Laravel应用的原因及解决方案

69次阅读
没有评论

问题描述

尝试将Dockerfile中的PHP镜像从8.1.0alpha3-fpm-alpine3.13升级到更适合的8.1.6版本,具体来说是8.1.6-fpm-alpine。然而,当进行构建并在Jenkins中推送时,构建失败,错误信息如下所示:

#9 9.372 checking whether to build static libraries... no
#9 9.460 #9 9.460 creating libtool
#9 9.493 appending configuration tag "CXX" to libtool
#9 9.568 configure: patching config.h.in
#9 9.570 configure: creating ./config.status
#9 9.609 config.status: creating config.h
#9 9.650 /bin/sh /usr/src/php/ext/pdo/libtool --mode=compile cc -I. -I/usr/src/php/ext/pdo -I/usr/src/php/ext/pdo/include -I/usr/src/php/ext/pdo/main -I/usr/src/php/ext/pdo -I/usr/local/include/php -I/usr/local/include/php/main -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib  -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H  -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64    -DZEND_COMPILE_DL_EXT=1 -c /usr/src/php/ext/pdo/pdo.c -o pdo.lo  -MMD -MF pdo.dep -MT pdo.lo
#9 9.650 make: /bin/sh: Operation not permitted
#9 9.650 make: *** [Makefile:239: pdo.lo] Error 127
------failed to solve: executor failed running [/bin/sh -c docker-php-ext-install pdo pdo_mysql sockets]: exit code: 2

用户提供了Dockerfile的内容如下:

FROM php:8.1.6-fpm-alpine
RUN echo http://dl-cdn.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories
RUN echo http://dl-cdn.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories
RUN docker-php-ext-install pdo pdo_mysql sockets
RUN curl -sS https://getcomposer.org/installer? | php -- \
     --install-dir=/usr/local/bin --filename=composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY . .
RUN chmod a+x ./start.sh
CMD ["sh","-c", "chmod a+x ./start.sh && ./start.sh"]

用户想知道出现这个问题的原因以及如何解决。

解决方案

根据提供的信息,可能是因为在Alpine镜像中的某些限制导致了构建失败。以下是可能的解决方案:

注意:以下解决方案是基于提供的信息和一般经验,具体情况可能因环境和配置而异。

方案1:权限问题

构建失败的错误信息中显示了make: /bin/sh: Operation not permitted,这可能是权限问题引起的。Alpine镜像默认情况下可能会有一些限制,可能需要适当调整。

尝试在Dockerfile中的构建步骤之前添加更改权限的操作,例如:

RUN chmod +x /bin/sh

这可能会解决权限问题,使得构建可以正常执行。

方案2:使用Root用户

Alpine镜像默认情况下以非Root用户身份运行,这可能会导致某些操作受到限制。尝试在Dockerfile的开头添加切换到Root用户的操作:

USER root

这会将用户切换为Root用户,可能会避免一些权限问题。

方案3:使用更稳定的镜像版本

由于问题可能与特定版本的Alpine镜像有关,尝试使用更稳定和已测试的版本,例如8.1.6-fpm-alpine3.14。这可以通过修改Dockerfile中的基础镜像来实现:

FROM php:8.1.6-fpm-alpine3.14

方案4:构建环境调整

如果上述解决方案仍然无法解决问题,考虑重新审查构建环境中的各项设置和依赖。可能需要更新系统和软件包,确保构建环境是最新的。

总结

构建失败可能是由于Alpine镜像中的权限或限制问题引起的。通过更改权限、切换用户、使用稳定版本的镜像或检查构建环境,可能能够解决这个问题。根据实际情况,选择适合的解决方案进行尝试。如果问题仍然存在,可能需要更详细的日志和调试来确定具体原因。

正文完