Docker: Ошибка обработки tar-файла (статус выхода 1): Ошибка настройки сводного каталога: не каталог

#linux #docker

#linux #docker

Вопрос:

Я новичок в Docker и не знаю, что вызывает эту ошибку или как ее диагностировать. Любая конкретная помощь с этой проблемой или советы о том, где сначала проверить, чтобы диагностировать проблему такого типа, были бы высоко оценены!

Мой Dockerfile:

 FROM java:8

# Install maven
RUN apt-get update
RUN apt-get -y install maven

# Build foo
ENV curr /foo
WORKDIR $curr
ADD $curr/pom.xml /code/$curr
ADD $curr/src /code/$curr
RUN mvn package
  

Когда я пытаюсь собрать его с помощью «docker build».:

 ...
Step 7 : ADD $curr/src /code/$curr
Error processing tar file(exit status 1): Error setting up pivot dir: mkdir /var/lib/docker/devicemapper/mnt/236c9a1ac7edbd177f4718286f530cbba4ca275ec881be1e8fa3168e572843ac/rootfs/code/foo/.pivot_root774820419: not a directory
  

Насколько я понимаю, mkdir выводит это, когда пытается создать каталог, но файл, символическая ссылка или сокет с таким же именем уже существует. Но, похоже, это какой-то внутренний шаг Docker, и изменение уровня отладки не привело к какому-либо полезному результату.

Комментарии:

1. Я не вижу ни одного mkdir в вашем Dockerfile, поэтому при попытке скопировать в несуществующие каталоги происходит сбой

Ответ №1:

Вы забыли / в /foo . В вашей конфигурации docker поместит ваш pom.xml as /code/foo , а не то, что, я полагаю, вы намеревались /code/foo/pom.xml . Затем он пытается добавить ваш исходный код в ваш ‘pom.xml ‘ файл, который выдает эту ошибку.

Попробуйте:

 FROM java:8

# Install maven
RUN apt-get update
RUN apt-get -y install maven

# Build foo
ENV curr /foo/ # <-- missing /
WORKDIR $curr
ADD $curr/pom.xml /code/$curr
ADD $curr/src /code/$curr
RUN mvn package
  

Ответ №2:

Как ни странно, Docker выдает эту ошибку также, когда мы пытаемся перезаписать существующий файл одноименной папкой, используя инструкцию Dockerfile COPY !

В моем случае вызываемая папка приложения flask копировалась Docker (вызывается разработчиком Openshift), как обычно, с помощью COPY /flask /usr/local/bin/flask и все работало нормально, пока новая версия Flask не удалила файл с именем flask в этом самом месте, что привело к тому же неспецифическому сообщению об ошибке:

 error: build error: Error processing tar file(exit status 1): Error setting up pivot dir: mkdir /var/lib/docker/overlay2/40221e791ab4c4d6d3610948703fe0eeb46618d6444a32e1bedcde3908ec5c7f/merged/usr/local/bin/flask/.pivot_root034225158: not a directory