Access Docker forwarded port on Mac
Asked Answered
C

2

6

There is a related post here: Port mapping in Docker on Mac OSX installed with Docker Toolbox

but it didn't work for me

Get ports for container

docker port 485186e65a5e

8080/tcp -> 0.0.0.0:33360
8088/tcp -> 0.0.0.0:33359
19888/tcp -> 0.0.0.0:33358
50070/tcp -> 0.0.0.0:33357
50075/tcp -> 0.0.0.0:33356
8042/tcp -> 0.0.0.0:33361

Check that someone listens to ports in container

bash-4.1# netstat -alnpt | grep 19888
tcp        0      0 127.0.0.1:19888             0.0.0.0:*                   LISTEN      1094/java   

Do wget in container

bash-4.1# wget 127.0.0.1:19888
--2016-04-11 14:16:54--  http://127.0.0.1:19888/
Connecting to 127.0.0.1:19888... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://127.0.0.1:19888/jobhistory [following]
--2016-04-11 14:16:54--  http://127.0.0.1:19888/jobhistory
Reusing existing connection to 127.0.0.1:19888.
HTTP request sent, awaiting response... 200 OK
Length: 6763 (6.6K) [text/html]
Saving to: `index.html'

100%[================================================================================================================================================================================>] 6,763       --.-K/s   in 0s      

2016-04-11 14:16:54 (182 MB/s) - `index.html' saved [6763/6763]

Try to access forwarded port from host, no luck... :(((

$docker-machine ip default
192.168.99.100
$ wget 192.168.99.100:33358
--2016-04-11 16:18:04--  http://192.168.99.100:33358/
Connecting to 192.168.99.100:33358... failed: Connection refused.

What do I do wrong?

Concent answered 11/4, 2016 at 14:23 Comment(0)
C
11

Omg, desired service started on 127.0.0.1 in container, that is why it wasn't visible from outside world. I've modified service config to start on 0.0.0.0 and now I can access forwarded container port

Concent answered 11/4, 2016 at 14:41 Comment(2)
How did you configure the container to start with 0.0.0.0 ?Pyrolysis
I was talking about my web service running inside the container. That server started on 127.0.0.1 so want not visible outside the container.Concent
N
7

I had the same problem and was able to fix it by specifying the host that the server within the container uses.

NOTE: when using host below, it means a web server host. When I use host-machine, I mean the main operating system I'm using, (i.e. not a container or a web server, just my laptop as a machine)

The Problem

Running web servers on the container like webpack-dev-server and http-server automatically run the app using a host of http://localhost. Typically you will see that in the output when you start the server. Something like :

Project is running at http://localhost:8080

or

Server available at http://127.0.0.1:8080

On most machines, localhost and 127.0.0.1 are the same thing. This host is not publicly viewable. As a result, your host machine can't see anything, even though it's looking in the right place.

Solution

You should specify a public host when you run the server inside your container.

webpack-dev-server --port 8080 --host 0.0.0.0

or

http-server -p 8080 -a 0.0.0.0

Because the 0.0.0.0 address is viewable to any outside machine, you should be able to see your app working as expected from your host machine.

NOTE: This works for any server, like Python's SimpleHTTPServer, etc. Just look up how to change the host for your chosen server in the documentation

Resources/Nods (how to run webpack-dev-erver with a publicly accessible host)[How to make the webpack dev server run on port 80 and on 0.0.0.0 to make it publicly accessible?

Nonjoinder answered 6/2, 2017 at 16:40 Comment(1)
Ahh! Thank you for this! I was struggling to connect to mongodb running inside docker. The container was running, I saw the port mapping localhost:9000 -> 27017/tcp. I could connect to mongodb via localhost:27017 from inside the container, but trying to connect to it from outside did not work. Starting mongodb w/ this option: mongodb.com/docs/v4.4/reference/program/mongod/… ``` CMD mongod ---bind_ip 0.0.0.0 ``` Fixed it!Lendlease

© 2022 - 2024 — McMap. All rights reserved.