¿Cómo permitir conexiones solo desde el contenedor frontend al contenedor backend?

¿Cómo permitir conexiones solo desde el contenedor frontend al contenedor backend?

Estoy intentando configurar mi frontend, backend y mi base de datos usando Docker. Estas son las condiciones en las que solo mi contenedor frontend debe realizar una solicitud al backend y no al público. He escrito un archivo conf pero aún puedo acceder al backend con postman. También estoy moviendo los archivos de compilación de la interfaz a un volumen y los monté en /usr/share/nginx/htmldonde el contenedor de la interfaz se detendrá y los archivos se entregarán directamente desde el contenedor nginx.

¿Es bueno tener otro servicio nginx ejecutándose en el contenedor frontend donde la ruta principal del contenedor nginx al servicio frontend nginx?

predeterminado.conf

upstream backend_servers {
    server backend:8000;
}


server {
    listen 80;

    location / {
        root /usr/share/nginx/html/frontend;
        try_files $uri $uri/ /index.html;
    }

    # Reverse proxy requests to the uWSGI server
    location /api {
        rewrite ^/api(.*) $1 break;
        uwsgi_pass backend_servers;
        include /etc/nginx/uwsgi_params;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

mi archivo de redacción de Docker es

version: '3'

services:
  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile.prod
    volumes:
      - app-data:/app/dist

  backend:
    build:
      context: .
      dockerfile: Dockerfile.prod
    environment:
      - DEBUG=0
      - ALLOWED_HOSTS=nginx,localhost,127.0.0.1
      - SECRET_KEY=my-secure-key
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    depends_on:
      - db

  db:
    image: postgres:latest
    restart: always
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - db-data:/var/lib/postgresql/data

  nginx:
    build: 
      context: ./nginx
      dockerfile: Dockerfile.prod
    ports:
      - "80:80"
    volumes:
      - app-data:/usr/share/nginx/html/frontend
    depends_on:
      - backend

volumes:
  db-data:
  app-data:

Respuesta1

Coloque el frontend, el backend y nginx en su propia red puenteada:

networks:
  backend:
    driver: bridge

service:
  frontend:
    ...
    networks:
      - backend

información relacionada