Ошибка копирования Dockerfile: ‘/azsh-linux-agent/start.sh’ не найден при сборке. Почему?

Вопрос или проблема

Это мой 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 действительно находится в директории, из которой вы выполняете команду сборки.

Оцените материал
Добавить комментарий

Капча загружается...