Docker化Laravel应用GitHub Actions流水线HTTP 500错误求助
Docker化Laravel应用GitHub Actions测试返回500错误排查求助
问题背景
本地环境执行docker-compose exec -T app php artisan test可正常通过Docker化Laravel应用的测试,但在GitHub Actions流水线中,某个预期返回200的测试出现HTTP 500错误。
已尝试的排查手段
- 改用GitHub Actions的services替代docker-compose部署应用
- 确保
.env.example和nginx/conf.d/laravel.conf.example正确复制为正式配置文件 - 验证配置文件内容的正确性
- 检查容器内文件权限
- 查看app和webserver容器日志
- 使用与本地相同版本的docker-compose
- 强制执行数据库迁移命令
- 添加等待时间确保
init.sh脚本执行完成
相关配置文件
GitHub Actions流水线脚本
name: Laravel Run Tests on: push: branches: - main pull_request: types: [opened, reopened, synchronize] jobs: test: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Set up PHP uses: shivammathur/setup-php@v2 with: php-version: '8.3' - name: Install PHP dependencies run: | cp .env.example .env cp nginx/conf.d/laravel.conf.example nginx/conf.d/laravel.conf sudo chown -R www-data:www-data . sudo chmod -R 777 . pwd ls -l ls -a ls -a ./nginx/conf.d cat ./nginx/conf.d/laravel.conf composer install --no-ansi --no-interaction --no-progress --no-scripts --optimize-autoloader php artisan key:generate php artisan config:cache - name: Install npm dependencies run: | npm install - name: Install Docker Compose run: | sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version - name: Set up Docker Compose run: | docker-compose up -d sleep 40 docker-compose exec -T app php artisan migrate --force docker ps - name: Check file permissions run: docker-compose exec -T app ls -l /var/www - name: Check logs of app container run: docker logs laravel_app - name: Check logs of webserver container run: docker logs nginx - name: Run tests inside Docker container run: docker-compose exec -T app php artisan test
docker-compose.yml
services: app: build: context: . dockerfile: Dockerfile container_name: laravel_app working_dir: /var/www volumes: - ./:/var/www networks: - laravel env_file: - .env depends_on: - db healthcheck: test: [ "CMD-SHELL", "curl -f http://localhost || exit 1" ] interval: 30s timeout: 10s retries: 5 restart: unless-stopped webserver: image: nginx:1.26.0-alpine container_name: nginx ports: - "8081:80" volumes: - ./:/var/www - ./nginx/conf.d:/etc/nginx/conf.d depends_on: - app networks: - laravel restart: unless-stopped db: image: mariadb:latest container_name: mariadb environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_DATABASE} MYSQL_USER: ${DB_USERNAME} MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - dbdata:/var/lib/mysql ports: - "3307:3306" networks: - laravel healthcheck: test: [ "CMD-SHELL", "mysqladmin ping -h localhost -u ${DB_USERNAME} -p${DB_PASSWORD} || exit 1" ] interval: 30s timeout: 10s retries: 5 restart: unless-stopped phpmyadmin: image: phpmyadmin/phpmyadmin container_name: phpmyadmin environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} ports: - "8082:80" depends_on: - db networks: - laravel restart: unless-stopped networks: laravel: volumes: dbdata:
Dockerfile
FROM php:8.3.7-fpm RUN apt-get update && apt-get install -y \ git \ unzip \ zip \ nodejs \ netcat-openbsd RUN docker-php-ext-install pdo_mysql RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - RUN apt-get install -y nodejs RUN apt-get update && apt-get install -y netcat-openbsd WORKDIR /var/www COPY . /var/www RUN composer install --no-interaction --no-plugins --no-scripts RUN npm i COPY init.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/init.sh CMD ["sh", "/usr/local/bin/init.sh"]
init.sh
#!/bin/sh chown -R www-data:www-data /var/www until nc -z -v -w30 db 3306; do echo 'Waiting for database connection...' sleep 1 done php artisan migrate exec php-fpm
目前.env和laravel.conf文件是示例文件的完整副本,恳请协助排查问题。
内容的提问来源于stack exchange,提问作者Alpakagb
相关产品推荐
相关产品推荐

