Docker Community Forums

Share and learn in the Docker community.

Accessing localhost from dockerfile during build

Hi,

I try to write a dockerfile for a multistage build, first step compile in one image, second step install in new image. Nothing special.

The problem is getting the source code into the first step for compilation. The repository is in a Gitea container that I can access in my browser using localhost:3000. So I tried

RUN git clone http://localhost:3000/my/repo.git

but I get

Failed to connect to localhost port 3000: Connection refused

Of course I could clone the repo out of the container any use copy, but I would like to avoid that.

After searching google for help I tried

RUN git clone http://host.docker.internal:3000/my/repo.git

as well as using the build option

--network=host

and

--network=services_gitea

which is the network I assigned in compose (+ prefix), and replacing localhost with the alias.

Non of this worked, and I saw later in the reference for docker build that the --network option is a setting for runtime and not buildtime. I have a windows host, so I assume it might be a problem with the background vm docker is running, and thus localhost not pointing to the host but the vm (?).

I hope someone here can help me.

Regards

Thorsten

Howdy, did you ever get this to work? I am trying to do something similar, but am getting connection refused error as well.

Yes, that is the all idea behind the isolation provided by container, even docker build (which builds one container per Dockerfile line, and commits it in an intermediate image).

As commented by the OP dhairya, and mentioned in the documentation I referred in my comments: “Docker container networking” and docker build, you can set to host the networking mode for the RUN instructions during build: then localhost would refer to the host localhost.

docker build --network=“host”
This is since API 1.25+ only, in docker v.1.13.0-rc5 (January 2017)

POST /build accepts networkmode parameter to specify network used during build.

But if you don’t need Git in your actual built image (for its main process to run), it would be easier to

clone the repo locally (directly on the host) before the docker build.
You need to clone it where your Dockerfile is, as it must be relative to the source directory that is being built (the context of the build).
use a COPY directive in the Dockerfile, to copy the host folder representing the checked out Git repo.
Note: add .git/: to your .dockerignore (file in the same folder as your Dockerfile), in order to not copy the repo_dir/.git folder of that cloned repo, if you don’t have git in your target image.

COPY repo_dir .
(Here ‘.’ represent the current WORKDIR within the image being built)