Home > Mobile >  Can't Connect to Docker container within local network
Can't Connect to Docker container within local network

Time:02-04

Trying to run QuakeJS within the docker container. I'm new to docker (and networking). Couldn't connect. Decided to start easier and ran nginxdemos/helloworld. Still can't connect to the server (running Ubuntu Server).

Tried: docker run -d -p 8080:80 nginxdemos/hello

Probably relevant ip addr:

2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 18:03:73:be:70:eb brd ff:ff:ff:ff:ff:ff
    altname enp0s25
    inet 10.89.233.61/20 metric 100 brd 10.89.239.255 scope global dynamic eno1
       valid_lft 27400sec preferred_lft 27400sec
    inet6 fe80::1a03:73ff:febe:70eb/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:7c:bb:47 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe7c:bb47/64 scope link 
       valid_lft forever preferred_lft forever

Here's docker-network-ls:


NETWORK ID     NAME       DRIVER    SCOPE

5671ad4b57fe   bridge     bridge    local

a9348e40fb3c   host       host      local

fdb16382afbd   none       null      local

ufw-status

To                         Action      From
--                         ------      ----
8080                       ALLOW       Anywhere                  
8080 (v6)                  ALLOW       Anywhere (v6)             

Anywhere                   ALLOW OUT   172.17.0.0/16 on docker0  

But when I try to access in a web browser (chrome and firefox) at 172.17.0.0:8080 (or many other permutations) I just end up in a time out. I'm sure this is a stupid think but I'm very stuck.

UPDATE

I installed a basic apache server and it worked fine. So it's something with Docker. I think.

UPDATE AGAIN

docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a7bbfee83954 nginxdemos/hello "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:8080->80/tcp, :::8080->80/tcp relaxed_morse

I can use curl localhost:8080 and see the nginx page

I was playing with ufw but disabled it, not worried about network security. Tried ufw-docker too

FINAL UPDATE

Restarting Docker worked :|

CodePudding user response:

When you publish a port with the -p option to docker run, the syntax is -p <host port>:<container port>, and you are saying, "expose the service running in the container on port <container port> on the Docker host as port <host port>.".

So when you run:

docker run -d -p 8080:80 nginxdemos/hello

You could open a browser on your host and connect to http://localhost:8080 (because port 8080 is the <host_port>). If you have the address of the container, you could also connect to http://<container_ip>:80, but you almost never want to do that, because every time you start a new container it receives a new ip address.

We publish ports to the host so that we don't need to muck about finding container ip address.


running 172.17.0.0:8080 (0.1, 0.2) or 10.89.233.61:8080 result in a timeout

172.17.0.0:8080 doesn't make any sense.

Both 172.17.0.1:8080 and 10.89.233.61:8080 ought to work (as should any other address assigned to a host interface). Some diagnostics to try:

  • Is the container actually running (docker ps)?
  • On the docker host are you able to connect to localhost:8080?
  • It looks like you're using UFW. Have you made any recent changes to the firewall?
  • If you restart docker (systemctl restart docker), do you see any changes in behavior?
  • Related