Проблемы со сборкой Dockerfile на GitHub Actions
Я перестроил свой проект Django на GitHub. Раньше мой Dockerfile работал так:
# Base image
ARG arch=amd64
FROM --platform=linux/${arch} python:3
# Set work directory
WORKDIR /appname
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Install dependencies
COPY requirements.txt .
RUN pip install -r requirements.txt
# Copy project
COPY . .
# Set default environment variables
ENV DJANGO_SETTINGS_MODULE=appname.settings
ENV DEBUG=False
# Copy entrypoint script
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Command to run on container start
ENTRYPOINT ["/entrypoint.sh"]
где "appname" было основным репозиторием моего Django-приложения, в котором также лежал Dockerfile. Я изменил структуру приложения, чтобы сделать его намного чище. Теперь мой проект выглядит так (из корневого каталога/GitHub repo):
.git/
.github/
apps/
appname/
config/
templates/
.gitignore
manage.py
requirements.txt
README.md
Dockerfile и entrypoint.sh теперь находятся в config/docker/..
Итак, я изменил свой Dockerfile:
# Base image
ARG arch=amd64
FROM --platform=linux/${arch} python:3
WORKDIR /config
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV DJANGO_SETTINGS_MODULE=appname.settings
ENV DEBUG=False
# Install dependencies
COPY requirements.txt .
RUN pip install -r requirements.txt --no-cache-dir
# Copy things
COPY . .
# Entrypoint script
RUN chmod +x entrypoint.sh
# Command to run on container start
ENTRYPOINT ["entrypoint.sh"]
Но я продолжаю получать ошибку, что requirements.txt
не найден, когда GitHub Actions пытается развернуть, локально на моей машине я могу собрать образ Docker из этого Dockerfile.
Я уже много чего перепробовал, но ничего не помогает.
Сообщение об ошибке от GitHub Actions выглядит так:
#7 [linux/amd64 2/5] COPY requirements.txt .
#7 ERROR: failed to calculate checksum of ref f0eg9y80n08nz8zngn17kwwx5::m58umy2tp7muiat6aia21a4pf: "/requirements.txt": not found
Мой шаг развертывания для GitHub Actions, который не работает, выглядит следующим образом:
- name: Build docker image
uses: docker/build-push-action@v6
with:
no-cache: true
context: ..
file: ./config/docker/dockerfile
push: false
tags: ${{ secrets.DOCKERHUB_USERNAME }}/appname:latest
platforms: linux/amd64,linux/arm64
build-args: arch=amd64
Я уже попробовал все варианты путей в Dockerfile, я уже попробовал различные варианты контекста в deploy.yml
, а также попробовал переместить requirements.txt
в тот же каталог, что и Dockerfile.
Я ожидал, что GitHub Actions установит требования, поскольку Docker делает это локально при попытке собрать образ.
Использование команды docker build
в терминале помогло мне проанализировать проблему.
Я решил эту проблему, изменив свой Dockerfile
следующим образом:
# Base image
ARG arch=amd64
FROM --platform=linux/${arch} python:3
WORKDIR /app
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV DJANGO_SETTINGS_MODULE=appname.settings
ENV DEBUG=False
# Install dependencies
COPY ../requirements.txt .
RUN pip install -r requirements.txt --no-cache-dir
# Copy things
COPY .. .
# Entrypoint script
RUN chmod +x config/docker/entrypoint.sh
# Command to run on container start
ENTRYPOINT ["config/docker/entrypoint.sh"]
И изменил контекст в моем deploy.yml
обратно на .