Скрытое приложение в Docker
Приложение без опубликованного порта
открывается только через прокси.
Строка ports
есть только у web,
а сервис app
слушает 8000
лишь для соседей
в сети проекта.
С компьютера
на этот номер
не к чему подключиться.
Каталог app
отдаёт страницу
со словом hello:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>page</title>
</head>
<body>
hello
</body>
</html>
Nginx проксирует корень
на имя сервиса.
Содержимое default.conf:
server {
listen 80;
location / {
proxy_pass http://app:8000;
}
}
Сервис web
на nginx:1.30
публикует
8080:80
и монтирует конфиг.
У app
нет ключа ports -
это и есть скрытый режим.
Файл compose.yaml:
services:
web:
image: nginx:1.30
ports:
- "8080:80"
volumes:
- "$PWD/default.conf:/etc/nginx/conf.d/default.conf"
app:
image: python:3.14
volumes:
- "$PWD/app:/app"
working_dir: /app
command: ["python", "-m", "http.server", "8000", "--bind", "0.0.0.0"]
После подъёма в фоне
страница по localhost:8080
показывает hello,
а прямой заход
на 8000
хоста
не откроет приложение.
Запуск проекта:
docker compose up -d
Соберите сервис land с прокси на app так, чтобы порт приложения не публиковался на компьютер, и отдайте слово hidden на 8094 компьютера.
Проверьте, что страница открывается через Nginx и что отдельная публикация порта приложения в описании проекта отсутствует.