使用自定义PHP镜像时Bitbucket Pipeline执行失败
问题描述
我制作了自定义Docker镜像并推送到DockerHub,将其配置到Bitbucket Pipeline后,镜像能正常拉取,但执行任何PHP命令都无反应,连php -v都没有输出。我试过在Intel处理器的本地环境构建镜像,也试过直接在Bitbucket上构建后推送到DockerHub,两种方式都没能解决问题。
执行输出情况
截图显示:执行ls -lh /usr/local/bin能正常列出目录内容,但php -v命令执行后无任何输出,直接结束。
Pipeline配置
definitions: services: mariadb: image: mariadb:10.6.4 environment: MYSQL_DATABASE: 'redacted' MYSQL_RANDOM_ROOT_PASSWORD: 'yes' MYSQL_USER: 'redacted' MYSQL_PASSWORD: 'redacted' steps: - step: &TestPHP name: Test PHP image: name: "sensetence/hcwcrm-php80fpm:latest" username: $DOCKERHUB_USERNAME password: $DOCKERHUB_TOKEN deployment: test services: - mariadb script: - cd api - ls -lh - ls -lh /usr/local/bin - php -v
镜像构建Dockerfile(省略部分软件安装步骤)
FROM php:8.0.25-fpm-alpine ARG UID ARG GID ENV UID=${UID} ENV GID=${GID} RUN mkdir -p /var/www/html WORKDIR /var/www/html # MacOS staff group's gid is 20, so is the dialout group in alpine linux. We're not using it, let's just remove it. RUN delgroup dialout RUN addgroup -g ${GID} --system symfony RUN adduser -G symfony --system -D -s /bin/sh -u ${UID} symfony RUN sed -i "s/user = www-data/user = symfony/g" /usr/local/etc/php-fpm.d/www.conf RUN sed -i "s/group = www-data/group = symfony/g" /usr/local/etc/php-fpm.d/www.conf RUN echo "php_admin_flag[log_errors] = on" >> /usr/local/etc/php-fpm.d/www.conf [... 此处省略软件安装、文件复制、supercronic配置步骤]
排查建议
- 检查PHP二进制文件权限:在Pipeline脚本中添加
ls -lh /usr/local/bin/php,确认文件存在且拥有执行权限(显示-rwxr-xr-x类权限)。 - 指定完整路径执行PHP:尝试执行
/usr/local/bin/php -v,避免PATH环境变量配置问题导致的命令无法找到。 - 验证PATH环境变量:添加
echo $PATH到脚本,确认/usr/local/bin在PATH列表中。 - 检查动态依赖完整性:Alpine使用musl libc,执行
ldd /usr/local/bin/php查看PHP依赖的系统库是否完整。 - 测试用户权限:尝试切换到root用户执行
su - root -c "php -v",排查当前symfony用户是否有执行PHP的权限。
内容的提问来源于stack exchange,提问作者Ralf Jahr
相关产品推荐
相关产品推荐

