首先,我想澄清的是,我已经对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()
,它显示pdo
和pdo_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是否有另一个驱动程序沿着数据库驱动程序,这实际上就是缺少的。
有人能帮我找出导致这个错误的原因吗?
1条答案
按热度按时间brc7rcf01#
我还没有找到这个问题的解决方案,但我通过在图像启动期间从S3下载包含所有必要的env变量的
.env
文件作为临时解决方案并将S3阅读权限添加到任务执行角色来解决这个问题。