Reputation: 68426
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)
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
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
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
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
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
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