Existem muitas maneiras de fazer isso, o mais simples é usar as redes internas do Docker.
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
6ef2c6836690 bridge bridge local
db24b1e2be58 host host local
edf606d533a5 none null local
Por padrão, seu contêiner entra na rede bridge
, a menos que você diga de outra forma durante o docker run...
.
$ docker run -P -d -p 12345:80 nginxdemos/hello
Depois de fazer isso, qualquer host na LAN pode acessá-lo usando o IP do Docker Host + a porta:
$ curl -I http://192.168.56.101:12345/
HTTP/1.1 200 OK
Server: nginx/1.13.8
Date: Fri, 27 Jul 2018 08:26:02 GMT
Content-Type: text/html
Connection: keep-alive
Expires: Fri, 27 Jul 2018 08:26:01 GMT
Cache-Control: no-cache
Firewalls
Lembre-se de que o firewall do Host do Docker pode ser a causa do tráfego que não entra / sai do contêiner do Docker. Em algumas situações, você pode precisar adicionar a porta do Host do Docker (12345 no meu exemplo acima) a uma lista de permissões para que os hosts fora do Docker Host possam acessar essa porta.