3
votes

I run a docker container with the following command:

docker run -d --name frontend_service -net host --publish=3001:3000 frontend_service

As I understand it maps the local port 3001 to the container port 3000. I already ssh to the container and checked curl localhost:3000. Works. But outside, on the host, I can't curl localhost:3001.

I checked nmap. The port is open:

nmap -v -sT localhost

Starting Nmap 6.47 ( http://nmap.org ) at 2016-10-19 01:24 UTC
Initiating Connect Scan at 01:24
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 25/tcp on 127.0.0.1
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 5051/tcp on 127.0.0.1
Discovered open port 3001/tcp on 127.0.0.1
Completed Connect Scan at 01:24, 0.06s elapsed (1000 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0011s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 996 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
3001/tcp open  nessus
5051/tcp open  ida-agent

How can i connect the container port with my host port?

1
Inside the container, on what address if your service listening? Maybe it's bound only to a localhost address (e.g., 127.0.0.1)? That would prevent any external connections, regardless of what you do with docker.larsks
Thanks, @larks. That was one problem.Citrullin

1 Answers

5
votes

When you specify --net=host, you are completely turning off Docker's network setup steps. The container won't get its own network namespace, won't get its own interfaces, and the port publishing system will have nothing to route to.

If you want your -p 3001:3000 to work, don't use --net=host.