从 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 中可能不存在的本地目录吗?