Alexander Mills
Alexander Mills

Reputation: 100010

Cannot access server running in container from host

I have a simple Dockerfile

FROM golang:latest
RUN mkdir -p /app
WORKDIR /app
COPY . .
ENV GOPATH /app
RUN go install huru
EXPOSE 3000
ENTRYPOINT /app/bin/huru

I build like so:

docker build -t huru .

and run like so:

docker run -it -p 3000:3000 huru

for some reason when I go to localhost:3000 with the browser, I get

enter image description here

I have exposed servers running in containers to the host machine before so not sure what's going on.

Upvotes: 3

Views: 6358

Answers (3)

MartinN
MartinN

Reputation: 61

Try this url: http://127.0.0.1:3000 I use the loopback

Upvotes: 0

Truong Dang
Truong Dang

Reputation: 3417

Try this one, if this has any output log. Please check them...

FROM golang:latest
RUN apt -y update
RUN mkdir -p /app
COPY . /app
RUN go install huru
WORKDIR /app

docker build -t huru:latest .
docker run -it -p 3000:3000 huru:latest bin/huru

Upvotes: 1

Mark Bramnik
Mark Bramnik

Reputation: 42471

From the information provided in the question if you see logs of the application (docker logs <container_id>) than the docker application starts successfully and it looks like port exposure is done correctly.

In any case in order to see ports mappings when the container is up and running you can use:

docker ps 

and check the "PORTS" section

If you see there something like 0.0.0.0:3000->3000/tcp

Then I can think about some firewall rules that prevent the application from being accessed...

Another possible reason (although probably you've checked this already) is that the application starts and finishes before you actually try to access it in the browser.

In this case, docker ps won't show the exited container, but docker ps -a will.

The last thing I can think of is that in the docker container itself the application doesn't really answer the port 3000 (I mean, maybe the startup script starts the web server on some other port, so exposing port 3000 doesn't really do anything useful).

In order to check this you can enter the docker container itself with something like docker exec -it <container_id> bash

and check for the opened ports with lsof -i or just wget localhost:3000 from within the container itelf

Upvotes: 5

Related Questions