Не удалось скопировать файл Dockerfile

У меня есть простой Dockerfile

FROM php:7.1-apache
LABEL maintainer="rburton@agsource.com"
COPY MyAgsourceAPI /var/www/MyAgsourceAPI
COPY MyAgsourceAPI/conf/php/drivers /usr/lib/apache2/modules/
COPY MyAgSourceAPI/conf/php/apache2/php.ini /usr/local/etc/php/

Используя команду build:

docker build -t rkevinburton/myagsourceapi .

Последняя строка возвращает ошибку:

Step 5/5 : COPY MyAgSourceAPI/conf/php/apache2/php.ini /usr/local/etc/php/
COPY failed: stat /var/lib/docker/tmp/docker-builder231753667/MyAgSourceAPI/conf/php/apache2/php.ini: no such file or directory

Все остальные строки "COPY" выполняются без ошибок. Мне не ясно, что это значит или как должен измениться мой Dockerfile. Я беру эту КОПИЮ в основном из документации по Docker Hub для PHP. Это может быть связано с тем, что /usr/local/etc/php доступен только для чтения. Но я не могу сказать по ошибке. Идеи?

3 ответа

Изменение строки на

COPY MyAgsourceAPI/conf/php/apache2 /usr/local/etc/php/

Который копирует контент (который является только одним файлом) работает. Хотя я все еще не уверен, как скопировать только один файл.

Согласно документации, COPY и ADD работают только в директории сборки: ADD doccumentation

Путь должен быть внутри контекста сборки; Вы не можете ДОБАВИТЬ../something / что-то, потому что первый шаг сборки docker - это отправить каталог контекста (и подкаталоги) демону docker.

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

удалите строку копирования и в команде запуска попробуйте это:

docker run -v /absolute/path/MyAgsourceAPI:/var/www/MyAgsourceAPI -v /absolute/path/MyAgsourceAPI/conf/php/drivers:/usr/lib/apache2/modules/ -v /absolute/path/MyAgsourceAPI/conf/php/apache2/php.ini:/usr/local/etc/php/php.ini <theidoftheimage>

Не уверен, что это лучший способ или лучшая практика, но это работа

Что решило проблему для меня, так это то, что мне нужно убедиться, что все файлы, которые я собираюсь скопировать, должны находиться в той же папке, что и мой Dockerfile (а не в любой папке над ним), в той же папке, где я запускаю докер построить команду. если бы я поместил их за пределы этой папки - КОПИЯ не удалась бы, как описано.

Другие вопросы по тегам