1

从 Github-CI 构建和运行 Docker 映像是否有某种技巧?我浏览了他们的文档,但找不到适用于我的用例的任何内容。

因为我想保持与通用 Docker 的兼容性,我不想使用他们内置的 Docker 容器的东西。我只想运行我必须在本地 Ubuntu 20.04 开发机器上构建和运行 Docker 映像的相同脚本。

我的.github/workflows/ci.yml样子:

name: CI
on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master
jobs:
  build:
    name: Build Docker
    runs-on: ubuntu-20.04
    steps:
      - name: Checking out our code
        uses: actions/checkout@master
      - name: Run Docker
        run: |
          docker --version
          ./build-docker.sh
          ./run-docker.sh
          ./check_results.sh

我是 Github 的 CI 新手,但如果我正确理解了他们的文档,这应该会启动 Ubuntu 20.04 VM,检查我的代码,然后运行我的三个脚本来构建、运行然后检查容器的输出。

我的build-docker.sh样子:

#!/bin/bash
docker build -t myimage -f Dockerfile.ubuntu2104 .

我的 run-docker.sh 看起来像:

docker run -it --name=ubuntu-gnome --rm \
    --tmpfs /run --tmpfs /run/lock --tmpfs /tmp \
    --cap-add SYS_BOOT --cap-add SYS_ADMIN \
    -v /sys/fs/cgroup:/sys/fs/cgroup \
    -v "$(pwd)/testing:/home/default/shared" \
    -p 5901:5901 -p 6901:6901 \
    myimage

此图像包含一些在 Ubuntu 21.04 环境中测试我的代码的脚本。我将一个本地./testing文件夹挂载为一个卷,这些脚本将它们的日志写入其中,以便我可以用我的check_results.sh脚本确认它们的输出。

当我从我的 Ubuntu 20.04 localhost 运行它时,这非常有效。但是,当我将其推送到 Github 时,该./run-docker.sh行似乎失败或退出,甚至没有输出任何内容。在我的本地主机上,我看到了启动映像时获得的正常 Docker 输出,以及 Ubuntu 的正常启动消息。但是在 Github 上我什么也得不到。

即使我将脚本行更改为./run-docker.sh || true通过,然后添加 a ls ./testing,看起来也没有任何内容写入共享卷,这意味着 Docker 映像实际上并未运行,或者我在映像中的脚本未运行,或者他们被阻止写入卷。无论哪种方式,我都不确定如何诊断问题,因为它没有给我任何输出,而且 Github 的 CI 是黑匣子,没有给我很多调试选项。

我添加了docker --version确认版本的行,看起来 Github 运行的 Docker 版本几乎与我在本地主机上使用的相同,所以我认为这不是 Docker 版本问题。

Github CI VM 是否有任何会破坏 Docker 映像的限制?

我可以做些什么来让我的 Docker 镜像运行,或者至少弄清楚当前的问题是什么?

问题可能是我使用--tmpfs挂载 Github 的 VM 中可能不存在的本地目录吗?

4

0 回答 0