Homunculus Reticulli
Homunculus Reticulli

Reputation: 68426

"docker build" requires exactly 1 argument(s)

I am trying to build an image from a specific Dockerfile, and tag it at the same time; I am following the online instructions fordocker build, but I get the following error:

"docker build" requires exactly 1 argument(s)

My directory structure:

project/
    foo/
    MyDockerfile

This is the command I run:

docker build -f /full/path/to/MyDockerfile -t proj:myapp

I have tried various combinations of the above command, but the results are always the error message given above. Why is this happening - as I am following what the documentation says?

Upvotes: 87

Views: 118087

Answers (6)

Brimstedt
Brimstedt

Reputation: 3140

If you're converting your build from a shell script to i.e. gitlab-ci, you might encounter this problem due to different multiline syntaxes:

I.e shell script may have:

 docker build . -t the-something \
  --build-arg COMMIT_SHA=${CI_COMMIT_SHA}

wherease gitlab ci dont need the trailing backslash for multiline:

 script:
- docker build . the-something
  --build-arg COMMIT_SHA=${CI_COMMIT_SHA}

If you keep the trailing backslash, it will be part of the command line and considered an argument.

Upvotes: 1

Narthring
Narthring

Reputation: 1419

You can also receive this error if there are spaces in your build arguments. For example:

--build-arg AGENT_BUILDDIRECTORY = $(agent.builddirectory)  

generated the "docker build" requires exactly 1 argument. errors message, and removing the spaces around the equals sign

--build-arg AGENT_BUILDDIRECTORY=$(agent.builddirectory)  

works correctly.

Upvotes: 1

Soubhagya Kumar Barik
Soubhagya Kumar Barik

Reputation: 2595

sudo docker build -t my-app .

Don't forget to add DOT at the end.

reference: https://docs.docker.com/get-started/02_our_app/

Upvotes: 13

granadaCoder
granadaCoder

Reputation: 27852

A. Please upvote Krzysztof's answer. I was lost without his hints.

But B, my contribution.

I was able to use a full path for the --file argument.

docker build --build-arg JAR_FILE="/source/java/mystuff/build/libs/mything-1.0.10-SNAPSHOT.jar" --file /full/path/to/MyDockerfile -t proj:myapp .

I had forgotten that little "." at the end.

D'oh!

Aka, do NOT overlook the last little "." (period) at the end !!!

Upvotes: 12

best wishes
best wishes

Reputation: 6624

docker build .

DO NOT MISS "THE DOT".

Upvotes: 105

Krzysztof Atłasik
Krzysztof Atłasik

Reputation: 22595

Parameter -f changes the name of the Dockerfile (when it's different than regular Dockerfile). It is not for passing the full path to docker build. The path goes as the first argument.

Syntax is:

docker build [PARAMS] PATH

So in your case, this should work:

docker build -f MyDockerfile -t proj:myapp /full/path/to/

or in case you are in the project directory, you just need to use a dot:

docker build -f MyDockerfile -t proj:myapp .

Upvotes: 148

Related Questions