Не удалось скопировать файл 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 (а не в любой папке над ним), в той же папке, где я запускаю докер построить команду. если бы я поместил их за пределы этой папки - КОПИЯ не удалась бы, как описано.