Вопрос или проблема
Это мой Dockerfile
FROM ubuntu:22.04
RUN apt update
RUN apt upgrade -y
RUN apt install -y curl git jq libicu70
# Также может быть "linux-arm", "linux-arm64".
ENV TARGETARCH="linux-x64"
WORKDIR /azp/
COPY ./azsh-linux-agent/start.sh ./
RUN chmod +x ./start.sh
RUN useradd agent
RUN chown agent ./
USER agent
ENTRYPOINT ./start.sh
Я пытаюсь создать образ из текущей директории
/home/jh/azsh-linux-agent
Я получил ошибку, когда пытался собрать
docker build --tag "azsh-linux-agent:1.0" --file "./azsh-linux-agent.dockerfile" .
вот такую
--------------------
10 | WORKDIR /azp/
11 |
12 | >>> COPY ./azsh-linux-agent/start.sh ./
13 | RUN chmod +x ./start.sh
14 |
--------------------
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref c6a592e2-a63c-497e-addd-2fab546c3594::hy7y7sols7kbk34sms7iylyew: "/azsh-linux-agent/start.sh": не найдено
Почему скрипт не обнаружен?
Если вы строите из /home/jh/azsh-linux-agent
, тогда вам нужно использовать
COPY ./start.sh ./
… чтобы скопировать файл /home/jh/azsh-linux-agent/start.sh
в контейнер Docker. Или вы можете использовать абсолютный путь, как в
COPY /home/jh/azsh-linux-agent/start.sh ./
Ответ или решение
Проблема, с которой вы столкнулись при сборке Docker-образа, связана с тем, что команда COPY не может найти указанный файл start.sh
. Давайте разберем причину этой ошибки и как ее исправить.
Ваша команда COPY выглядит следующим образом:
COPY ./azsh-linux-agent/start.sh ./
Ошибка, которую вы видите:
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref ...: "/azsh-linux-agent/start.sh": not found
говорит о том, что указанный файл не найден по тому пути, который вы указали.
Причина ошибки
При выполнении команды docker build
вы находитесь в каталоге /home/jh/azsh-linux-agent
. Это означает, что относительные пути, используемые в вашем Dockerfile, должны относиться к текущему рабочему каталогу, из которого вы запускаете команду сборки.
Поскольку вы находитесь в каталоге azsh-linux-agent
, команда COPY должна выглядеть так:
COPY ./start.sh ./
или
COPY /home/jh/azsh-linux-agent/start.sh ./
Таким образом, Docker сможет найти файл start.sh
.
Исправленный Dockerfile
Ваш исправленный Dockerfile будет выглядеть следующим образом:
FROM ubuntu:22.04
RUN apt update
RUN apt upgrade -y
RUN apt install -y curl git jq libicu70
# Укажите архитектуру целевой платформы
ENV TARGETARCH="linux-x64"
WORKDIR /azp/
# Исправлено: путь к файлу start.sh
COPY ./start.sh ./
RUN chmod +x ./start.sh
RUN useradd agent
RUN chown agent ./
USER agent
ENTRYPOINT ./start.sh
Заключение
После внесения вышеперечисленных изменений попробуйте снова выполнить команду сборки:
docker build --tag "azsh-linux-agent:1.0" --file "./azsh-linux-agent.dockerfile" .
Эти исправления должны решить вашу проблему, и образ будет успешно собран. Убедитесь, что файл start.sh
действительно находится в директории, из которой вы выполняете команду сборки.