Adr*_*ian 3 diskspace docker github-actions
我有两个 github 存储库(称为 A 和 B),它们都有一个.github/workflows/build_and_test.yml看起来几乎与此相同的文件:
name: Build and test
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-with-docker:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: docker/setup-buildx-action@v2
- uses: docker/build-push-action@v3
with:
tags: my_tag:latest
load: true
context: .
cache-from: type=gha
cache-to: type=gha,mode=max
- run: docker run my_tag pytest
Run Code Online (Sandbox Code Playgroud)
在回购协议A中
Dockerfile是r-base:4.2.1,大约 782MBdocker run my_tag pytest运行,一切都很好)在仓库 B 中
Dockerfile是pytorch/pytorch,大约 5.82GB警告是You are running out of disk space. The runner will stop working when the machine runs out of disk space. Free space left: 0 MB。
错误发生在docker run my_tag pytest步骤中:我得到
Unable to find image 'my_tag:latest' locally
docker: Error response from daemon: pull access denied for my_tag, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
Run Code Online (Sandbox Code Playgroud)
我怀疑这是一个转移注意力的东西,如果我解决了磁盘空间问题,它就会消失,尽管我不确定。(我怀疑Unable to find image这是一个转移注意力的事情,因为我在仓库 A 中没有收到此错误。)
有没有办法build-push-action在不更改 Dockerfile 的情况下减少存储库 B 中我的步骤使用的磁盘空间?我应该使用https://github.com/docker/build-push-action#inputsno-cache-filters中描述的输入吗?
(可能相关:如何在持续集成中删除旧的 docker 映像以节省磁盘空间,尽管我正在寻找更适合我的 github 工作流程设置的答案。)
根据https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources github 的 Linux 运行器有 14 GB 的 SSD 空间。
更新:我尝试在存储库 B 中添加no-cache: true,docker/build-push-action@v3并且看到与以前完全相同的running out of disk space警告和Unable to find image错误。
令人困惑的是,github UI 旁边有一个复选标记Run docker/build-push-action@v3,这表明该步骤已成功运行,因此我不确定运行程序在哪个确切时间点耗尽磁盘空间:
感谢https://github.com/actions/runner-images/issues/2840#issuecomment-1284059930,我得到了这个工作。
我的新 github 工作流程 yml 文件是
name: Build Docker image
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-with-docker:
runs-on: ubuntu-20.04
steps:
- name: Remove unnecessary files
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- uses: actions/checkout@v3
- uses: docker/setup-buildx-action@v2
- uses: docker/build-push-action@v4
with:
context: .
tags: my_tag:latest
load: true
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Run pytest
run: docker run my_tag pytest
Run Code Online (Sandbox Code Playgroud)
该Remove unnecessary files步骤修复了磁盘空间警告并且Unable to find image错误消失了(所以这确实是一个转移注意力的事情)。
OP提供的解决方案很好,但可能还不够。就我而言,由于我有一个很大的 docker 镜像(大约 20G),我不得不删除更多的 APT 软件,并进一步删除.git/签出后创建的目录(通常您不需要将其.git/放入 docker 镜像进行生产)。
我用过这个,现在效果很好
name: Docker build and push
on:
push:
branches:
- "main"
jobs:
build:
runs-on: ubuntu-20.04
steps:
-
name: Check disk space
run: df . -h
-
name: Free disk space
run: |
sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true
sudo rm -rf \
/usr/share/dotnet /usr/local/lib/android /opt/ghc \
/usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \
/usr/lib/jvm || true
echo "some directories deleted"
sudo apt install aptitude -y >/dev/null 2>&1
sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \
esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \
google-cloud-sdk imagemagick \
libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \
mercurial apt-transport-https mono-complete libmysqlclient \
unixodbc-dev yarn chrpath libssl-dev libxft-dev \
libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \
snmp pollinate libpq-dev postgresql-client powershell ruby-full \
sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \
-y -f >/dev/null 2>&1
sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1
sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1
sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1
sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1
sudo apt-get autoremove -y >/dev/null 2>&1
sudo apt-get autoclean -y >/dev/null 2>&1
echo "some packages purged"
-
name: Check disk space
run: |
sudo dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -nr | head
df . -h
sudo du /usr/ -hx -d 4 --threshold=1G | sort -hr | head
-
name: Checkout
uses: actions/checkout@v3
-
name: Check working space directory
run: du ${GITHUB_WORKSPACE} -h -d 1
-
name: Get more space
run: |
df . -h
sudo rm -rf ${GITHUB_WORKSPACE}/.git
df . -h
-
name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/my-app:latest
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5697 次 |
| 最近记录: |