Dockerfile: COPY не работает (даже если он может найти файл) - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь создать docker образ.

Я хочу извлечь файлы из gitlab и скопировать их в другой каталог.

Вот соответствующая часть моего Dockerfile:

ENV RALPH_LOCAL_DIR="/var/local/ralph"
ENV RALPH_IMAGE_TMP_DIR="/tmp"

RUN mkdir -p $RALPH_LOCAL_DIR
RUN cd $RALPH_LOCAL_DIR
WORKDIR $RALPH_LOCAL_DIR
RUN git clone <OMITTED_FOR_THIS_POST>
WORKDIR project-ralph/ralph

COPY README.md $RALPH_IMAGE_TMP_DIR/

Я получаю эту ошибку:

COPY failed: stat /var/lib/docker/tmp/docker-builder094767244/README.md: no such file or directory

Так что копирование не удается. Но я могу перечислить файл в контейнере с помощью ls. Поэтому, если я запускаю RUN ls -la README.md, он может найти файл. Так почему он не может скопировать файл?

1 Ответ

1 голос
/ 26 января 2020

COPY копирует файл из хост-системы. Вам нужно запустить git clone, прежде чем начинать операции Docker. (Это также упрощает случай, когда вам нужны какие-то учетные данные для запуска git clone: получение секретного ключа s sh в образ для запуска git clone без утечки его в конечное изображение, довольно сложно, и Вы действительно не хотите делать какие-то хитрые вещи с помощью клавиш s sh.)

FROM ...
WORKDIR /var/local/ralph
COPY README.md .
git clone <OMITTED_FOR_THIS_POST>
docker build -t ... .

Если файл уже находится в изображении, как в существующем Dockerfile, тогда вам нужно RUN cp или RUN mv, чтобы положить его куда-нибудь еще.

RUN cp README.md /tmp
...