Linux Labs

Контейнеры: Docker и compose / Ступень 2 из 11

Порты, переменные и перезапуск

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 2 из 8 · на машине · 7 мин

Порт контейнера и порт сервера

У контейнера своя сеть со своими портами. Здесь — как открыть его порт на сервере.

Docker даёт контейнеру своё сетевое пространство: свои интерфейсы, свой адрес во внутренней сети Docker и свои порты. nginx в site слушает порт 80 внутри контейнера. На интерфейсах сервера этого порта нет, а порт 8080 сервера никто не слушает — отсюда отказ. 80/tcp в столбце PORTS — порт, который объявил образ; сам по себе он на сервере ничего не открывает.

Чтобы сервер принимал подключения и передавал их в контейнер, порт публикуют. Публикация порта — ключ -p порт_сервера:порт_контейнера в docker run:

bash
# порт 5000 сервера → порт 3000 контейнера
sudo docker run -d --name api -p 5000:3000 <образ>

Подключения к порту 5000 сервера Docker передаёт на порт 3000 контейнера, а в PORTS появляется 0.0.0.0:5000->3000/tcp. Порт сервера держит процесс docker-proxy — его покажет sudo ss -tlnp. Опубликованные порты контейнера перечисляет docker port <имя>.

Порты задаются при создании контейнера. Чтобы добавить порт, контейнер пересоздают: docker rm -f удаляет его даже работающим, потом — docker run с нужным -p.

Заметка

Порт 80 этой машины занимает nginx самого сервера: curl http://localhost/ ответит он, с заголовком Server: nginx/1.24.0 (Ubuntu). Публикация -p 80:… откажет с ошибкой address already in use.

Упражнение · сделать

Открой сайт на порту сервера

Сделай так, чтобы сайт из контейнера site открывался по адресу http://localhost:8080/. Имя контейнера и образ оставь прежними.

Войти и начать Машина доступна после входа

Цели · 0 из 2

  • Открыть сайт на порту 8080 сервера ещё не выполнена
  • Оставить site из образа nginx:alpine ещё не выполнена

Цели шага

0 из 2
  • Открыть сайт на порту 8080 сервера — ещё не выполнена
  • Оставить site из образа nginx:alpine — ещё не выполнена
Ubuntu 24.04

Цели шага

0 из 2
  • Открыть сайт на порту 8080 сервера — ещё не выполнена
  • Оставить site из образа nginx:alpine — ещё не выполнена
Загрузка…