php Laravel Docker镜像找不到pgsql的驱动程序

mnemlml8  于 2023-04-19  发布在  PHP
关注(0)|答案(1)|浏览(121)

首先,我想澄清的是,我已经对StackOverflow和其他资源进行了深入的研究,以找到解决我的问题的方法。尽管发现了类似的问题,但我还没有找到适合我的解决方案。因此,我相信我的问题可能不是重复的,我感谢任何帮助解决它。
我正在使用pgsql作为DB_CONNECTION驱动程序运行Laravel项目。当使用所有必需的ENV变量(包括DB_CONNECTION)在本地构建和运行镜像时,我可以成功连接到我的远程RDS数据库。但是,当从Github Actions构建并使用ECS运行时,它会导致500 (Internal Server Error)在响应中不显示日志,也不会在storage/logs/laravel.log或CloudWatch中生成日志。
我在API中添加了一些调试路径:
返回所有可用环境变量的路由和.env中所有必需的变量都列出了它们的预期值。另一个路由只返回DB_CONNECTION驱动程序值,它正确地返回“pgsql”。第三个路由返回phpinfo(),它显示pdopdo_pgsql已安装。尽管如此,Laravel仍然会抛出错误“could not find driver”,这一次我能够将dd($e->getMessage());添加到app/Exceptions/Handler.php的可报告回调中。
下面是Dockerfile:

FROM composer:2 as build

WORKDIR /app

COPY . /app

RUN set -ex && \
    composer install \
    --no-scripts \
    --no-autoloader \
    --ansi \
    --no-interaction \
    --no-dev && \
    composer dump-autoload

FROM php:8.1-alpine3.17

ENV PHP_VERSION=81

RUN apk add --no-cache \
    curl \
    nginx \
    php${PHP_VERSION}-fpm \
    php${PHP_VERSION}-ctype \
    php${PHP_VERSION}-curl \
    php${PHP_VERSION}-dom \
    php${PHP_VERSION}-gd \
    php${PHP_VERSION}-intl \
    php${PHP_VERSION}-mbstring \
    php${PHP_VERSION}-opcache \
    php${PHP_VERSION}-openssl \
    php${PHP_VERSION}-phar \
    php${PHP_VERSION}-session \
    php${PHP_VERSION}-xml \
    php${PHP_VERSION}-xmlreader \
    php${PHP_VERSION}-pdo \
    php${PHP_VERSION}-pdo_pgsql \
    libpq-dev && \
    rm -rf /var/cache/apk/*

RUN docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql && \
    docker-php-ext-install pdo pdo_pgsql

RUN adduser -S www-data && \
    addgroup -S www-data && \
    addgroup www-data www-data && \
    addgroup www-data nginx

WORKDIR /app

COPY --from=build --chown=www-data:www-data /app .

RUN chmod -R 775 storage bootstrap/cache

RUN mkdir -p \
    /var/lib/nginx/tmp \
    /var/log/nginx \
    /var/log/php${PHP_VERSION}

RUN touch /run/nginx.pid

RUN chown -R www-data:www-data \
    /var/lib/nginx/tmp \
    /var/log/nginx \
    /var/log/php${PHP_VERSION} \
    /run/nginx.pid

USER www-data

COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf
COPY docker/nginx/default.conf /etc/nginx/conf.d/default.conf
COPY docker/php/fpm/www.conf /etc/php${PHP_VERSION}/php-fpm.d/www.conf

RUN php artisan optimize

EXPOSE 8000

# I was using supervisor but removed it for testing
CMD ["sh", "-c", "nginx -g 'daemon off;' & php-fpm81 -F"]

我不知道是什么原因导致了这个错误。我不知道Laravel是否有另一个驱动程序沿着数据库驱动程序,这实际上就是缺少的。
有人能帮我找出导致这个错误的原因吗?

brc7rcf0

brc7rcf01#

我还没有找到这个问题的解决方案,但我通过在图像启动期间从S3下载包含所有必要的env变量的.env文件作为临时解决方案并将S3阅读权限添加到任务执行角色来解决这个问题。

相关问题