Как запустить один проект Django на нескольких статических IP-адресах в docker

Здесь этот проект работает нормально. Этот проект открывается только на одном статическом IP-адресе.

Проблема в том, что я хочу открыть этот проект на нескольких статических IP-адресах в docker. Может ли кто-нибудь подсказать мне, как это сделать?

Эта помощь будет полезна для меня.

Помогите, пожалуйста.

docker-compose.yml:

version: '3.9'

services:
  app:
    build:
      context: .
      args:
       - DEV=true
    ports:
      - '8000:8000'
    volumes:
      - ./app:/app
      - dev-static-data:/vol/web
    command: >
      sh -c 'python manage.py wait_for_db &&
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000'
    environment:
      - DB_HOST=db
      - DB_NAME=devdb
      - DB_USER=postgres
      - DB_PASS=m@noj5078
      - DEBUG=1
    depends_on:
      - db
  db:
    image: postgres:13-alpine
    volumes:
      - dev-db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=devdb
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=m@noj5078
volumes:
  dev-db-data:
  dev-static-data:

proxy/default.conf.tpl

server {
    listen ${LISTEN_PORT};

    location /static {
        alias /vol/static;
    }

    location / {
        uwsgi_pass           ${APP_HOST}:${APP_PORT};
        include              /etc/nginx/uwsgi_params;
        client_max_body_size 10M;
    }
}

Назначьте несколько IP-адресов вашей хост-системе обычным способом. Это потребует работы с вашим сетевым администратором для получения этих адресов и специфической настройки ОС для назначения их вашей системе; это выходит за рамки вопроса Stack Overflow.

Затем Compose ports: будет прослушивать все интерфейсы хоста. Вам не нужно ничего менять внутри контейнеров.

Если система имеет несколько интерфейсов, но вы хотите прослушивать только некоторые из них, ports: принимает необязательный параметр IP-адрес, который указывает конкретный интерфейс хоста для использования. Вы можете прослушивать все, некоторые или никакие интерфейсы, и вы можете указать различный порт хоста для каждого адреса, если хотите.

ports:
  # external interface: listen to default HTTP port 80
  - '10.10.10.10:80:8000'

  # internal interface: listen to "native" port 8000
  - '10.20.20.20:8000:8000'

  # localhost-only: listen to "native" port as well
  - '127.0.0.1:8000:8000'

  # ignore third interface 10.30.30.30, this container
  # will not be accessible there
Вернуться на верх