GitHub Actions部署Laravel 11 Sail时Docker构建报错(php.ini未找到)
解决Laravel Sail Docker构建时找不到php.ini的问题
问题原因
构建失败的核心原因是:你指定的Dockerfile(./vendor/laravel/sail/runtimes/8.3/Dockerfile)执行COPY php.ini /etc/php/8.3/cli/conf.d/99-sail.ini时,构建上下文(项目根目录,context: .)中不存在php.ini文件。本地能正常构建是因为你的本地项目根目录有这个文件,但它要么没被提交到Git仓库,要么被.gitignore规则排除了,导致GitHub Actions拉取代码后找不到该文件。
解决方案
方案1:提交php.ini到Git仓库
- 检查项目根目录的
.gitignore文件,若存在php.ini条目则删除它。 - 将本地的
php.ini添加到Git并提交:
后续GitHub Actions拉取代码时就能获取到该文件,构建时即可正常执行复制操作。git add php.ini git commit -m "Add php.ini to repository" git push origin main
方案2:在构建流程中生成php.ini(无需提交到仓库)
如果不想把php.ini提交到仓库,可以在GitHub Actions的构建步骤中,从Sail的runtime目录复制默认配置文件到项目根目录:
修改你的GitHub Actions配置文件,在Install Composer dependencies步骤后添加以下内容:
- name: Copy Sail default php.ini to project root run: cp ./vendor/laravel/sail/runtimes/8.3/php.ini ./php.ini
修改后的build任务完整步骤如下:
jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' - name: Install Composer dependencies run: composer install --no-interaction --prefer-dist --optimize-autoloader - name: Copy Sail default php.ini to project root run: cp ./vendor/laravel/sail/runtimes/8.3/php.ini ./php.ini - name: List files in runtimes directory run: ls -la ./vendor/laravel/sail/runtimes/8.3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push Docker image uses: docker/build-push-action@v3 with: context: . file: ./vendor/laravel/sail/runtimes/8.3/Dockerfile push: true tags: marcellopato/webroker:latest build-args: | WWWGROUP=1000
此操作会在Docker构建前,在项目根目录生成php.ini文件,满足Dockerfile的复制要求。
内容的提问来源于stack exchange,提问作者Marcello Pato
相关产品推荐
相关产品推荐

