У контейнера своя сеть со своими портами. Здесь — как открыть его порт на сервере.
Docker даёт контейнеру своё сетевое пространство: свои интерфейсы, свой адрес во внутренней сети Docker и свои порты. nginx в site слушает порт 80 внутри контейнера. На интерфейсах сервера этого порта нет, а порт 8080 сервера никто не слушает — отсюда отказ. 80/tcp в столбце PORTS — порт, который объявил образ; сам по себе он на сервере ничего не открывает.
Чтобы сервер принимал подключения и передавал их в контейнер, порт публикуют. Публикация порта — ключ -p порт_сервера:порт_контейнера в docker run:
Подключения к порту 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 ещё не выполнена