设置 QEMU 时出现 Github 操作错误 - 错误:无法找到可执行文件:docker
Posted
技术标签:
【中文标题】设置 QEMU 时出现 Github 操作错误 - 错误:无法找到可执行文件:docker【英文标题】:Github action error with Set up QEMU - Error: Unable to locate executable file: docker 【发布时间】:2021-08-21 21:04:14 【问题描述】:我正在构建一个工作流来测试、构建一个 docker 映像并将其推送到 GitHub 私有存储库。
我曾经在 ububntu-latest 上运行该操作并使用特定的 php 版本和一些环境构建,但由于它与生产构建不同,因此出现了一些问题。
我想使用与生产环境相同的环境,所以我使用了一个使用 php7.3 的容器,并在 ubuntu-latest 上运行操作后调用了它
我现在面临的问题是在成功更新作曲家后,我无法调用默认步骤 tp build docker image。我在“设置 QEMU”步骤中收到此错误
错误:无法找到可执行文件:docker。请验证文件路径是否存在,或者该文件是否可以在 PATH 环境变量指定的目录中找到。还要检查文件模式以验证文件是否可执行。这是我的行动
名称:构建和发布 Docker 以进行开发 在: 推: 分支:开发 工作: 建造: 运行:ubuntu-latest 容器: 图片:egahmad/php7.3-laravel-apache-development # 卷: # - app_files:/var/www/html/ 服务: mysql: 图片:mysql:5.7 环境: MYSQL_DATABASE:分贝 MYSQL_USER:用户 MYSQL_PASSWORD:秘密 MYSQL_ROOT_PASSWORD:秘密 端口: - 3306:3306 选项: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 脚步: - 使用:actions/checkout@v2 - 名称:验证 TNT MySQL 连接 运行:| mysql --版本 sudo apt-get install -y default-mysql-client mysql --host mysql --port $ job.services.mysql.ports['3306'] -uuser -psecret -e "显示数据库" - 名称:复制 .env 运行:| php -r "file_exists('.env') || 复制('.env.cicd', '.env');" - 名称:安装依赖项 运行:作曲家安装 - 名称:生成密钥 运行:php artisan key:generate - 名称:目录权限 运行:chmod -R 777 存储引导/缓存 - 名称:通过 PHPUnit 执行测试(单元和功能测试) 环境: MYSQL_DATABASE:分贝 DB_USERNAME:用户 DB_PASSWORD:秘密 DB_PORT: $ job.services.mysql.ports[3306] 运行:供应商/bin/phpunit - 名称:设置 QEMU 用途:docker/setup-qemu-action@v1 - 名称:设置 Docker Buildx 用途:docker/setup-buildx-action@v1 - 名称:登录 GitHub 容器注册表 用途:docker/login-action@v1 和: 注册:ghcr.io 用户名:$ github.repository_owner 密码:$ secrets.GITHUB_SECRET - 名称:构建和推送 用途:docker/build-push-action@v2 和: 语境: 。 文件:./Dockerfile 推:真 目标:ci 标签: ghcr.io/account/image:development 构建参数:| GITHUB_USER=$ 秘密.GITHUB_USERNAME GITHUB_PASSWORD=$ 秘密.CR_PAT - 名称:图像摘要 运行: echo $ steps.docker_build.outputs.digest【问题讨论】:
【参考方案1】:docker
命令在egahmad/php7.3-laravel-apache-development
上不可用,而且我不相信 qemu 步骤旨在在容器内运行(它们正在对内核进行更改)。要在 ubuntu-latest
主机上运行 qemu 步骤,我相信您需要 remove the container 部分。如果步骤需要此环境,您可以尝试将作业分解为多个作业,其中一些步骤在容器中运行,而其他步骤直接在主机上运行。
如果您在 Github Actions 中完成所有这些步骤,因为您的 docker 构建需要已创建的二进制文件,我建议您迁移到多阶段构建。第一阶段将是您的egahmad/php7.3-laravel-apache-development
映像,运行您当前在 GHA 中执行的步骤,然后第二阶段将从第一阶段复制而不是构建上下文。
【讨论】:
这是我最终弄清楚的,当我可以从“egahmad/php7.3-laravel-apache-development”获取文件时,您能否指导我使用多阶段构建的示例“进入下一阶段?我曾尝试使用 github artefacts 但它没有用,所以我试图找出另一种解决方案。 @AhmedIbrahim 我认为这是一个单独的问题。至少,该问题需要您要修改的 Dockerfile 以及您在尝试实施多阶段构建时遇到的错误。有关多阶段构建的一般信息,请参阅docs.docker.com/develop/develop-images/multistage-build以上是关于设置 QEMU 时出现 Github 操作错误 - 错误:无法找到可执行文件:docker的主要内容,如果未能解决你的问题,请参考以下文章
设置 Github Jenkins 插件时出现“无法连接到存储库”错误
Github 操作,使用 npm 或 yarn 安装 Github 包时出现 401 未授权
在 GitHub Actions 中启动 nuxt 时出现 Nuxt 致命错误
jest.config.ts:从 Github Actions 运行 jest 时出现“registerer.enabled 不是函数”错误