Как запустить один проект 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