9

I have pulled a Docker image:

$ docker pull ghost 

And run a container from the image:

$ docker run --name test-ghost -p 8080:2368 -d ghost 7d984e974f6a75fe18b3d397b5c8f0a428928a2be9df83f0d61a679aa5f537fc 

My understanding is that the -p switch will map a port on the host (8080) to a port inside Docker (2368), so that I can hit the web server running within Docker, from outside docker, i.e. from my host.

However, when I try to browse to any of the following addresses in Chrome, from my host:

http://localhost:8080/ http://0.0.0.0:8080/ http://127.0.0.1:8080/ 

I get the following error:

This webpage is not available ERR_CONNECTION_REFUSED 

This seems like it might be a connectivity issue, rather than a problem inside the container, as when I inspect the running processes inside the container, it appears that NodeJS is running:

$ docker top test-ghost UID PID PPID ... CMD docker 4290 1028 ... npm docker 4324 4290 ... sh -c node index docker 4325 4324 ... node index 

But it appears nothing is listening on port 8080:

$ sudo lsof -n -i4TCP:8080 | grep LISTEN $ 

I also checked and my MacOS firewall is turned off.


I don't expect a full solution here, as I'm aware the information I've given is minimal.

What I'm wondering is, how would one go about fixing such a problem?

It seems that the Docker port is unaccessible.

Is there some way of finding out why the port mapping didn't work? Or what ports are being exposed by Docker? Perhaps I'm mapping the wrong internal port?

Or are there any other general suggestions as to what I might be doing wrong here?

1

4 Answers 4

8

Finally figured out how to make this work!

I'm running Docker on MacOS and using 'Docker QuickStart Terminal'.

Turns out, navigating to 'localhost', '127.0.0.1', etc. was wrong, because it looks like Docker sets up its own host:

 ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ docker is configured to use the default machine with IP 192.168.99.100 For help getting started, check out the docs at https://docs.docker.com 

When I use 192.168.99.100, given above, everything works fine.

1

To find out the IP address of the running container, you can use:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myContainerID 
0

If you run docker with docker-machine use the following command to get the IP address (assuming default is your name):

docker-machine ip default 

See: https://docs.docker.com/machine/reference/ip/

0

Started playing with docker and this is the first problem/issue I came across.

Seems like docker lets you specify if you are using ports in different modes such as - host, bridge (default)

In the bridge mode docker shows you a message once you deploy ghost - Your blog is now available on http://localhost:2368/ but visiting this url shows connection refused.

to fix this you need to visit the instance settings in kitematic (easier then using the console ). Go to hostname / ports tab. Create a mapping as shown in the image from docker port to host port and bingo. now visit the url again and everything works as expected.

Kitematic instance settings port

1
  • Note - make sure you use the same port in both docker and published fields. Otherwise some links in the ghost site won't work such as home since they are bound to the docker port. Commented Apr 26, 2018 at 2:37

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.