Установка

На 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_хоста/ на порту 80. [docs.docker](https://docs.docker.com/engine/network/drivers/host/)
Если нужен тестовый запуск без привязки к конкретному порту, можно использовать
-P, но тогда 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:8080 и curl 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]