lstate error: нет такого файла или каталога при построении Docker из пользовательского образа с помощью команды Docker build

60
3

Я создал собственное изображение для стека лампы со следующими файлами

apps.conf 
Dockerfile
entrypoint.sh
start.sh
supervisord.conf

Dockerfile был Dockerfile с помощью Dockerfile ENV, RUN, ADD и CMD.

Каждое приложение успешно установлено, но приклеило его к команде ADD и проверило заданный путь, который является правильным.

ADD /home/ktpl/nayan/MyLamp/supervisord.conf /etc/supervisor/supervisord.conf

ADD /home/ktpl/nayan/MyLamp/apps.conf /etc/supervisor/conf.d/apps.conf

ADD /home/ktpl/nayan/MyLamp/entrypoint.sh /entrypoint.sh

ADD /home/ktpl/nayan/MyLamp/start.sh /start.sh

Процесс застревает в команде "Добавить".:

lstat home/ktpl/nayan/lamp/supervisord.conf: no such file or directory

спросил(а) 2016-10-25T14:32:00+03:00 4 года, 4 месяца назад
1
Решение
105

Конструкция Docker всегда работает относительно контекста - то есть каталог, который вы передаете в команде docker build. Вы не можете использовать абсолютные пути в ADD, вы должны указывать исходный файл относительно контекста сборки.

Для локальных файлов вы также должны использовать COPY вместо ADD, поэтому ваш файл Docker будет выглядеть следующим образом:

COPY ./supervisord.conf /etc/supervisor/supervisord.conf
#etc.

И затем вы создадите его из своего каталога MyLamp с помощью docker build -t my-tag.

ответил(а) 2016-10-25T15:04:00+03:00 4 года, 4 месяца назад
43

ADD может использоваться для копирования локальных файлов на изображение при построении.

Пара вещей:

    Вы создаете изображение, используя текущий каталог В вашем случае /home/ktpl/nayan/lamp - действительный каталог Не уверен, что у вас есть каталог /home/ktpl/nayan/MyLamp и файлы, присутствующие там.

Согласно документации докера

Путь должен находиться внутри контекста сборки; вы не можете ADD../something/something, потому что первым шагом сборки docker является отправка каталога контекста (и подкаталогов) демона докеров.

Если ваши файлы находятся в том же каталоге, что и вы создаете образ, вы можете использовать приведенные ниже инструкции в Dockerfile

ADD ./supervisord.conf /etc/supervisor/supervisord.conf

ADD ./apps.conf /etc/supervisor/conf.d/apps.conf

ADD ./entrypoint.sh /entrypoint.sh

ADD ./start.sh /start.sh


Конечно, как и в другом ответе, COPY также может быть использована.

Пример содержимого Dockerfile:

FROM busybox
ADD ./test.txt /test.txt
CMD ls /

Вы можете создать изображение и запустить его, показывая, что файл добавлен в изображение ниже.

enter image description here

Если все файлы и каталоги присутствуют, и вы все еще видите эту проблему, тогда проверьте .dockerignore есть запись для того же самого.

ответил(а) 2016-10-25T16:40:00+03:00 4 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема