Перейти к основному содержимому

Docker: для «сборки» требуется 1 ошибка аргумента

· 5 мин. чтения

1. Обзор

Docker — это контейнерная платформа с открытым исходным кодом. Это позволяет нам упаковывать приложения в контейнеры и стандартизировать исполняемые компоненты, которые объединяют исходный код приложения с операционной системой. Это набор инструментов для разработки программного обеспечения для создания, совместного использования и запуска отдельных контейнеров.

Dockerfile — это текстовый файл, содержащий список команд, которые можно использовать для создания образа. Это самый простой способ автоматизировать создание образов.

Одно из преимуществ Dockerfile заключается в том, что нам просто нужно написать команды, эквивалентные командам оболочки Linux, поэтому нам не нужно изучать какой-либо новый синтаксис для него.

Мы можем столкнуться с различными проблемами при создании образа с помощью Dockerfile. Здесь, в этом руководстве, мы научимся решать очень распространенную проблему сборки Docker .

Давайте сначала разберемся с ошибкой «Для сборки Docker требуется 1 аргумент».

2. Понимание проблемы

В этом разделе сначала мы создадим образец Dockerfile для воспроизведения ошибки, а затем воспользуемся различными подходами для ее устранения . Давайте создадим новый файл Dockerfile с именем « Dockerfile » со следующим содержимым:

FROM        centos:7
RUN yum -y install wget \
&& yum -y install unzip \
&& yum install -y nc \
&& yum -y install httpd && \
&& yum clean all
EXPOSE 6379
ENTRYPOINT ["ping"]
CMD ["google.com"]

Здесь мы написали образец Dockerfile, который использует «centos: 7 » в качестве базового образа. Следовательно, он поддерживает все команды centos .

Мы также установили некоторые другие служебные команды Docker в Dockerfile.

Команда для воспроизведения проблемы «Docker build Requires 1 Argument»:

$ docker build
"docker build" requires exactly 1 argument.
See 'docker build --help'.
Usage: docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

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

Рассмотрим один из вариантов:

$ docker build -t test_image/centos
"docker build" requires exactly 1 argument.
See 'docker build --help'.
Usage: docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

Здесь в обоих случаях мы столкнулись с проблемой «Docker build Requires 1 Argument».

3. Различные способы создания образа Docker

Прежде чем мы перейдем к устранению ошибки «Для сборки Docker требуется 1 аргумент», давайте сначала разберемся с командой сборки Docker, используя различные параметры.

Сборка Docker запускается демоном Docker. Во-первых, сборка Docker отправляет демону весь контекст. Идеальная ситуация — начать с пустого каталога и добавить только файлы, необходимые для сборки образа Docker, используя Dockerfile:

$ docker build .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos:7
14.04: Pulling from library/centos
2e6e20c8e2e6: Extracting [============> ] 17.83MB/70.69MB
0551a797c01d: Download complete
512123a864da: Download complete

Мы также можем использовать флаг -f для создания образа, указав Dockerfile из определенного места:

$ docker build -f /root/dockerImage/Dockerfile .

Чтобы пометить изображение, мы можем использовать параметр -t с командой сборки Docker:

$ docker build -t test_image/centos .

Мы также можем передать аргументы сборки с помощью команды сборки Docker:

$ docker build -t test_image/centos --build-arg JAVA_ENV=1.8  .

Чтобы очистить сборку образа, мы можем использовать опцию –no-cache в команде:

$ docker build -t test_image/centos --build-arg JAVA_ENV=1.8  --no-cache .

В старой версии Docker нам нужно было передать --no-cache=true , но в более новых версиях этого нет. Мы также можем создать Dockerfile без имени файла Dockerfile :

$ docker build -f /root/dockerImage/DockerFile_JAVA .

Здесь мы создали образ Docker, используя имя файла DockerFile_JAVA .

4. Из-за недостаточности аргументов

Наиболее распространенная причина ошибки «Docker build Requires 1 Argument» — это когда мы пытаемся собрать образ без предоставления достаточных аргументов. Здесь в аргументах нам нужно указать каталог с командой.

По умолчанию мы указали точку (.) в команде, которая указывает демону Docker использовать текущий рабочий каталог оболочки в качестве контекста сборки:

$ docker build .

Точка (.) в основном сообщает Docker, что Dockerfile должен использоваться из текущего каталога. Мы также можем изменить контекст сборки Docker, используя следующую команду:

$ docker build /root/test

Еще одна проблема, связанная со сборкой Docker, с которой мы можем столкнуться:

$ docker build -f /root/test/Dockerfile2 .
unable to prepare context: unable to evaluate symlinks in Dockerfile path:
lstat /root/test/Dockerfile2: no such file or directory

Здесь в приведенной выше команде мы пытаемся создать образ Docker, используя имя файла «Dockerfile2», если этот файл отсутствует в текущем каталоге, мы получим следующую ошибку:

unable to prepare context: unable to evaluate symlinks in Dockerfile path:
lstat /root/test/Dockerfile2: no such file or directory

Чтобы решить эту проблему, нам нужно указать правильное имя файла с опцией -f .

5. Вывод

В этом руководстве мы узнали о проблемах, связанных с командой сборки Docker.

Сначала мы исследовали различные способы сборки образа Docker, затем решили проблему с аргументами сборки Docker и, наконец, узнали еще несколько проблем, связанных с командой сборки Docker.