Jeremy
Jeremy

Reputation: 1578

Unblocking port 80 / nginx / docker

I want to get a Laravel application running in Docker, but am failing at the first hurdle, I have tried to use the docker/getting started Docker image with the following command but am getting the below blockage.

$docker run -p 80:80 docker/getting-started

docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use.

Listing out what is running is here:

$sudo lsof -i :80

COMMAND   PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
nginx     143          root    6u  IPv4 0x17106caf335097c7      0t0  TCP localhost:http (LISTEN)
nginx   10145 Jeremyrrsmith    6u  IPv4 0x17106caf335097c7      0t0  TCP localhost:http (LISTEN)
nginx   10218 Jeremyrrsmith    6u  IPv4 0x17106caf335097c7      0t0  TCP localhost:http (LISTEN)
nginx   10296 Jeremyrrsmith    6u  IPv4 0x17106caf335097c7      0t0  TCP localhost:http (LISTEN)
nginx   10372 Jeremyrrsmith    6u  IPv4 0x17106caf335097c7      0t0  TCP localhost:http (LISTEN)

From what I read I needed to kill whatever was running on port 80, so have killed them (exception of 143 which errors), but they restart with a new PID. Should I actually be killing these?

The Docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use. error is causing me a headache.

netstat -ltnp | grep 80 is a common command to run according to other threads, but i get netstat: option requires an argument -- p as a response. Having read into that, is that the first is a Linux command (was not clear to me in other threads). I'm on a Mac. lsof -n -i4TCP:80 | grep LISTEN is the command on mac (hope it helps others). That provides

nginx   10145 Jeremyrrsmith    6u  IPv4 0x17106caf335097c7      0t0  TCP 127.0.0.1:http (LISTEN)
nginx   10218 Jeremyrrsmith    6u  IPv4 0x17106caf335097c7      0t0  TCP 127.0.0.1:http (LISTEN)
nginx   10296 Jeremyrrsmith    6u  IPv4 0x17106caf335097c7      0t0  TCP 127.0.0.1:http (LISTEN)
nginx   10372 Jeremyrrsmith    6u  IPv4 0x17106caf335097c7      0t0  TCP 127.0.0.1:http (LISTEN)

I kill these PID and they just restart with a new PID, I don't think that I need them, but are they system related? How do I kill them for good and are they actually blocking me from using port 80 for Docker?

Upvotes: 4

Views: 10487

Answers (4)

abdulalim
abdulalim

Reputation: 480

Docker nginx port issue: By default ubuntu install apache which run in 80 port.This can happen also for nginx. So follow same process.

sudo /etc/init.d/apache2 stop

docker-compose.yml file

nginx:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - '80:80'
    volumes:
      - static_volume:/home/pos/static/
      - ./docker/nginx/development:/etc/nginx/conf.d

Upvotes: 1

invad0r
invad0r

Reputation: 926

The easiest and most common way around used ports is using a different port-mapping e.g. docker run -p 8080:80 docker/getting-started and accessing via localhost:8080

If you want to use port 80 you probably have to stop the nginx service rather than killing the process.

Upvotes: 3

Jeremy
Jeremy

Reputation: 1578

I think it's laravel valet. I have just $valet stop which i think has solved it. As lsof -n -i4TCP:80 | grep LISTEN now returns nothing and running the docker command has set up a container. So port 80 was blocked by nginx, which was added by laravel valet, and to use port 80 you need to stop valet, and restart it when you dont need the port anymore. I think.

Upvotes: 1

mrbenjoi
mrbenjoi

Reputation: 395

You have nginx running on your device which is blocking port 80, just as you said yourself.

Have you installed nginx yourself? Is it installed as a system service, that is started automatically when you power up your device?

If it runs as a system service, you probably will need to gradually shut it down using the appropriate system command, instead of trying to kill the processes. I don't know what the command for this is on Mac, but you will find out if you search for it.

On linux, depending on your system, this could e.g. be systemctl stop nginx.

Do you know where the nginx process comes from?

Upvotes: 0

Related Questions