Home > Net >  nginx docker does not redirect gogs docker container
nginx docker does not redirect gogs docker container

Time:11-17

i'm new to docker networking and nginx stuff, but try to "dockerize" everything on a local devserver. for tests a docker image with nginx which should redirect another container (gogs) from port 3000 to a specific url with port 80. And i want to have the reverse proxy configs and the docker images "separated", for each "app" an own docker-compose file.

so i should reach with http://app.test.local the gog installation. BUT: i reach with http://app.test.local only a bad gateway of nginx and with http://app.test.local:3000 i reach the gog installation...

i tried many tutorials, but somehwere there have to be an error, thats slips in every time

so what i did:

$ docker network create testserver-network

created docker-compose for nginx:

version: '3'

services:
  proxy:
    container_name: proxy
    hostname: proxy
    image: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - /docker/proxy/config:/etc/nginx
      - /docker/proxy/certs:/etc/ssl/private
    networks:
      - testserver-network
networks:
  testserver-network:

and one for gogs:

version: '3'

services:
  gogs:
    container_name: gogs
    hostname: gogs
    image: gogs/gogs
    ports:
      - 3000:3000
      - "10022:22"
    volumes:
      - /docker/gogs/data:/var/gogs/data
    networks:
      - testserver-network
networks:
  testserver-network:

(mapped directories work)

configured default.conf of nginx:

# upstream gogs {
#   server      0.0.0.0:10880;
# }

server {
  listen        80;
  server_name   app.test.local;

  location / {
    proxy_pass  http://localhost:3000;
  }
}  

and added to hosts file on client app.test.local <server ip>

docker exec proxy nginx -t and docker exec proxy nginx -s reload say everythings fine...

CodePudding user response:

Answer

You should proxy to http://gogs:3000 instead. You also shouldn't need to expose port 3000 on your localhost unless you want http://app.test.local:3000 to work. I think ideally you should remove that, so http://app.test.local should proxy to your gogs server, and http://app.test.local:3000 should error out.

Explanation

gogs is exposed on port 3000 inside its container, which is then further exposed on port 3000 on your host machine. The nginx container does not have access to port 3000 on your host, so when it tries to proxy to http://localhost:3000 it is proxying to port 3000 inside the nginx container (which is hosting nothing).

Because you have joined the containers to the same network, you should be able to reference the gogs container from the nginx container by its hostname (which you've set to gogs). Now nginx will proxy through the docker network. So you should be able to perform the proxy without needing to expose 3000 on your local machine.

  • Related