WHITECOLOR
WHITECOLOR

Reputation: 26142

docker build hangs in directory with many files

Windows 10. I have in folder just:

app (directory with many files)
Dockerfile (simpliest docker file)

I run "docker build ." and it just hangs. If I remove "app" directory. Build runs ok. In docker file just one line:

FROM node

Didn't find any issues like that. It fills like it tries to scan the directory or something.

Any advice?

UPD: It seems that I should use .dockerignore https://docs.docker.com/engine/reference/builder/#/dockerignore-file

Upvotes: 4

Views: 2418

Answers (2)

Jonathan Lee
Jonathan Lee

Reputation: 1432

Your Dockerfile should be put in the directory that only includes it's build context. For example, if you are building a spring-boot app, you can put the Dockerfile right under /app, as shown in this official docker sample.

Docker's documentation:

In most cases, it’s best to start with an empty directory as context and keep your Dockerfile in that directory. Add only the files needed for building the Dockerfile.

Warning: Do not use your root directory, /, as the PATH as it causes the build to transfer the entire contents of your hard drive to the Docker daemon.

I've seen that simple docker examples put dockerfile in the root directory, but for complicated examples like the one I posted above, the dockerfile is put only in it's relevant directory. You can dig through the dockersamples repository and find your case.

Upvotes: 0

johnharris85
johnharris85

Reputation: 18926

When you run docker build ... the Docker client sends the context (recursive contents of the directory) via REST to the Docker daemon for building. If that context is large, this could take some time (depending on a variety of factors, if your daemon is local / remote, platform maybe, etc...).

How long are you giving it to hang before giving up? Could be that it's still just working? Or could be that the context was so large maybe the client / daemon experienced an issue. Checking the (client / daemon) logs would help debug that.

And yes, a .dockerignore file (basically a .gitignore but for Docker context) is probably what you're looking for, unless you need the contents of the app directory during your build.

Upvotes: 8

Related Questions