如何在GitHub Actions中使Dockerfile Plus扩展正常工作?
我正在搭建一套流畅的环境构建流程,使用基于Docker的Lando作为环境构建系统,将Dockerfile提供给Lando,由它通过docker-compose构建集群。本地运行完全正常,也已经在GitHub Actions中成功搭建了与本地一致的测试环境。
但现在尝试用Dockerfile Plus扩展来扩展Dockerfile,我的Dockerfile内容如下:
# syntax = edrevo/dockerfile-plus INCLUDE+ ./docker/prod/Dockerfile COPY docker/dev/php.ini /usr/local/etc/php/conf.d/zzz-docker-custom.ini # Other stuff here.
这个配置在本地运行良好,能正确引入docker/prod/Dockerfile的内容,但在GitHub Actions工作流中运行时,INCLUDE+行出现语法错误,说明扩展未加载。根据Dockerfile Plus文档,它依赖BuildKit,新版本Docker默认启用BuildKit,但GitHub环境似乎没启用。我已经按要求显式设置了环境变量,但问题依然存在。
需要说明的是,我无法直接修改docker build命令(该命令由Lando动态生成的docker-compose文件调用),且本地无需修改该命令就能正常运行,因此不清楚问题出在哪里。请问如何让Dockerfile Plus在GitHub Actions中正常工作?
以下是几个可以尝试的解决步骤,确保GitHub Actions环境中正确启用BuildKit并让Lando加载Dockerfile Plus扩展:
全局设置BuildKit环境变量
在GitHub Actions工作流的全局环境中添加DOCKER_BUILDKIT=1和COMPOSE_DOCKER_CLI_BUILD=1,确保docker-compose调用docker build时启用BuildKit。示例工作流片段:name: Lando Build on: [push] env: DOCKER_BUILDKIT: 1 COMPOSE_DOCKER_CLI_BUILD: 1 jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 # 后续运行Lando的步骤启用Docker Buildx
GitHub Actions默认的Docker环境可能需要显式启用Buildx来支持BuildKit扩展。在工作流中添加setup-buildx-action步骤:- name: Set up Docker Buildx uses: docker/setup-buildx-action@v3这会确保Docker使用支持扩展的BuildKit构建器。
修改Lando配置强制启用BuildKit
在你的.lando.yml配置文件中,为对应的服务添加环境变量覆盖,确保Lando生成的docker-compose配置包含BuildKit相关设置:services: # 替换成你的服务名称,比如php、app等 your-service: overrides: environment: - DOCKER_BUILDKIT=1验证Docker版本兼容性
确保GitHub Actions中使用的Docker版本足够新(建议20.10+),可以在工作流中添加版本检查步骤:- name: Check Docker versions run: | docker --version docker buildx version如果版本过旧,使用setup-docker action指定新版本:
- name: Set up Docker uses: docker/setup-docker-action@v3 with: version: "25.0.0"在运行Lando前显式导出环境变量
如果全局环境变量不生效,可以在运行Lando命令前直接导出变量:- name: Run Lando build run: | export DOCKER_BUILDKIT=1 export COMPOSE_DOCKER_CLI_BUILD=1 lando build
内容的提问来源于stack exchange,提问作者Crell

