如何在自己的Docker容器中使用github actions/checkout@v2?

6

我有自己的php镜像,希望在我的项目中使用它来运行测试。

container: rela589n/doctrine-event-sourcing-php:latest

services:
  test_db:
    image: postgres:13-alpine
    env:
      POSTGRES_DB: des
      POSTGRES_USER: des_user
      POSTGRES_PASSWORD: p@$$w0rd

steps:
  - uses: actions/checkout@v2

  - whatever_needed_to_run_tests_inside_container

在结账时出现以下错误:

EACCES: permission denied, open '/__w/doctrine-event-sourcing/doctrine-event-sourcing/6977c4d4-3881-44e9-804e-ae086752556e.tar.gz'

这是合理的,因为在新的Docker容器中没有这样的文件夹结构。我想做的是在提供runs-on:ubuntu-20.04的虚拟机中运行检查操作,并为Docker配置卷,使其可以访问代码。然而,我不知道这种方法是否可行,也不知道如何实现。我猜即使以这种方式可能做到,它也不适用于其他操作。


你应该找到一种避免使用 container 指令的方法。我从未见过一个值得所有麻烦的好用例,而且没有它更容易完成的事情。 - DannyB
2个回答

2

谢谢,这真的帮助我找到了问题所在。我试图在 Github Actions 中从 Docker 容器中部署 CDK 项目时,遇到了权限拒绝的错误。

在检出代码并尝试部署后,我遇到了权限拒绝的错误。

Error: EACCES: permission denied, mkdir '/__w/arm-test/arm-test/cdk.out/asset.7d21b14f781f8b0e4ebb3b30c66614a80f71a2c1637298e5557a97662fce0abe'

这个问题的解决方法是使用与Github Actions runner相同的用户和组来运行容器,以便匹配源代码目录的权限:https://github.com/actions/runner/issues/691

jobs:
  configure:
    runs-on: ubuntu-latest
    outputs:
      uid_gid: ${{ steps.get-user.outputs.uid_gid }}
    steps:
      - id: get-user
        run: echo "::set-output name=uid_gid::$(id -u):$(id -g)"

  clone-and-install:
    needs: configure
    runs-on: ubuntu-latest
    container:
      image: mcr.microsoft.com/vscode/devcontainers/base:ubuntu
      options: --user ${{ needs.configure.outputs.uid_gid }}
    steps:
      - uses: actions/checkout@v2

不幸的是,这似乎不再起作用了,因为Docker报错为“守护进程的错误响应:无法找到组121:组文件中没有匹配条目”,如果您像上面那样同时指定用户和组,则会出现这种情况,或者如果您只指定组,则会出现“守护进程的错误响应:无法找到用户1001:passwd文件中没有匹配条目”。 - JBCP

2
当我尝试使用自己的Docker镜像时,遇到了相同的问题。在我的情况下,实时安装所需组件并不是一种选择,所以我必须解决这个问题。 似乎GitHub使用名为runnerdockeruser 1001group 121来运行Docker镜像。添加组、添加用户并将用户添加到sudoers后,问题得到解决。 请注意,检出路径以/_w开头,这很奇怪。如果我不使用容器执行actions/checkout@v2,路径将为/home/runner。目前还不确定如何解决这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接