#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