Установка
На Gentoo Docker ставится пакетом app-containers/docker через emerge, а отдельный CLI может идти как app-containers/docker-cli. [packages.gentoo](https://packages.gentoo.org/packages/app-containers/docker-cli)
Базовый запуск сервиса для OpenRC:
sudo rc-service docker start
sudo rc-update add docker default
Это стандартный сценарий для Gentoo. [ivonblog](https://ivonblog.com/posts/gentoo-docker/)
Первичная проверка
После установки проверь:
docker version
docker run --rm hello-world
Если hello-world отрабатывает, значит клиент, демон, сеть и доступ к Docker Hub работают. [docs.docker](https://docs.docker.com/engine/release-notes/28/)
У тебя это уже подтвердилось: Docker стартует, hello-world запускается, и docker version показывает рабочий client/server. [docs.docker](https://docs.docker.com/engine/release-notes/28/)
Базовый запуск
Для обычного веб-контейнера используй публикацию порта:
docker run -d --name web -p 80:80 nginx
Так контейнер будет доступен по http://IP_хоста/-P на порту 80. [docs.docker](https://docs.docker.com/engine/network/drivers/host/)
Если нужен тестовый запуск без привязки к конкретному порту, можно использовать , но тогда Docker раздаст случайные host-порты для всех EXPOSE`-портов. [docs.docker](https://docs.docker.com/get-started/docker-concepts/running-containers/publishing-ports/)
Сеть и порты
-p 80:80 — это самый понятный вариант для сервиса, который должен быть доступен извне. [labex](https://labex.io/ru/tutorials/docker-forwarding-ports-in-docker-containers-for-application-access-393010)
--network host убирает сетевую изоляцию и даёт контейнеру сетевой стек хоста; в этом режиме -p уже не нужен. [ru.linux-console](https://ru.linux-console.net/?p=7607)
То есть:
-p— мост/NAT, явный проброс порта.-P— автоматический проброс всех exposed-портов на случайные host-порты.--network host— контейнер слушает прямо на портах хоста. [ru.linux-console](https://ru.linux-console.net/?p=7607)
Твой кейс с nginx
У тебя nginx успешно запустился, docker ps показал 0.0.0.0:8080->80/tcp, а curl http://127.0.0.1:8080curl http://172.238.119.171:8080 вернули и 200 OK. [docs.docker](https://docs.docker.com/engine/network/port-publishing/)
Это подтвердило, что Docker на Gentoo работает нормально, а внешняя доступность зависит от того, на какой порт ты публикуешь сервис и какие правила сети действуют на хосте. [digitalocean](https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux)
Когда нужен host network
Если контейнер сам открывает несколько портов и ты не хочешь перечислять каждый, --network host может быть удобен, но это уже более грубый и менее изолированный режим. [docs.docker](https://docs.docker.com/engine/network/drivers/host/)
Для обычного веб-сервера лучше всё же -p 80:80, потому что так понятнее и безопаснее. [docs.docker](https://docs.docker.com/get-started/docker-concepts/running-containers/publishing-ports/)
Что важно помнить
Если наружу не видно, сначала проверяют:
docker ps
ss -ltnp
iptables -S
На Gentoo Docker сам создаёт нужные правила в iptables, но внешний доступ всё равно может упираться в firewall провайдера, NAT или сетевые ограничения вне контейнера. [docs.docker](https://docs.docker.com/engine/network/packet-filtering-firewalls/)
В твоём случае локальный и внешний curl уже подтвердили, что публикация портов работает как надо. [docs.docker](https://docs.docker.com/engine/network/port-publishing/)
Практический шаблон
Для обычного сервиса:
docker run -d --name web -p 80:80 nginx
Для всех exposed-портов автоматически:
docker run -d --name app -P image
Для полного разделения сетей хоста и контейнера не используем --network host; а если именно он нужен, тогда порты публиковать отдельно уже не требуется. [ru.linux-console](https://ru.linux-console.net/?p=7607)
[file-name 000365_2026-05-05_10-57-46.txt]