docker не может добавлять локальные файлы в контейнер

#docker #dockerfile #ubuntu-20.04

#docker #dockerfile #ubuntu-20.04

Вопрос:

У меня есть структура каталогов, которая выглядит следующим образом:

  • ./7.3/web/Dockerfile
  • ./etc/php/*

Итак, я нахожусь в . каталоге и делаю sudo docker build -t test 7.3/web , и он создает контейнер, но останавливается ADD etc/php /usr/local/etc/php , выдавая мне следующую ошибку:

 ADD failed: file not found in build context or excluded by .dockerignore: stat etc/php: file does not exist
 

Однако файл (каталог well) существует. Когда я это делаю ls -latr ./etc/php , я вижу это:

 total 12
drwxr-xr-x 2 neubert neubert 4096 Jan  3 23:32 conf.d
drwxr-xr-x 4 neubert neubert 4096 Jan  3 23:32 ..
drwxr-xr-x 3 neubert neubert 4096 Jan  3 23:32 .
 

Таким образом, относительно каталога, в котором я запускаю команду, etc/php существует. Относительно каталога, в котором существует Dockerfile etc/php , не существует (это ../../etc/php ).

Есть идеи?

Ответ №1:

Итак, я в . каталог и выполните sudo docker build -t test 7/3 / web, и он создаст контейнер, но остановится на ADD etc/php /usr/local/etc / php…

Аргумент, который вы предоставляете docker build ( 7/3/web ), определяет «контекст сборки». Docker может обращаться только к файлам, расположенным в этом каталоге или ниже.

Вероятно, самым простым решением является перемещение вашего Dockerfile файла в каталог верхнего уровня и настройка относительных путей оттуда.

Вам не нужно перемещать Dockerfile (как указывает Джейсон, вы можете ссылаться на него где угодно -f ), но это делает организацию каталога более очевидной.

Ответ №2:

Вы можете съесть свой пирог и съесть его, используя -f флаг следующим образом:

docker build -t test -f ./7.3/web/Dockerfile .

Выше выполняется указанный Dockerfile, но в качестве контекстного пути используется текущий каталог (который используется в качестве основы для добавления и копирования файлов).

Более подробная информация здесь, среди очень удобных документов на веб-сайте Docker: https://docs.docker.com/engine/reference/commandline/build/#specify-a-dockerfile—f