[SOLUCIONADO] Problema de puertos con Docker

Iniciado por phr4ckl0t, Octubre 15, 2017, 04:34:00 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Octubre 15, 2017, 04:34:00 PM Ultima modificación: Octubre 17, 2017, 09:05:37 AM por Gabriela
Hey h4x0rs como la llevan? espero que bien. Me paso por acá con un pequeño problema que me tiene pensando, sucede que queria armar un pequeño entorno de desarrollo web para php+html5, pero no queria utilizar xampp ni mucho menos vagrant, etc. Así que le di la oportunidad a Docker ya que las imagenes pesan realmente poco y es bastante simple(curioso decirlo cuando tengo un problema jeje) y los contenedores son muy rapidos. El problema viene a la hora visualizar el contenido de index.php que esta en el contenedor en el directorio /app desde mi equipo host. Para configurarlo hice lo siguiente:

1. Descargué una imagen de alpine linux con php 7
    docker image pull jorge07/alpine-php

2.Creé el contenedor bindeando la carpeta donde tengo el index.php en mi host en modo lectura para el contenedor y manteniendolo corriendo en background
    docker container run -d --name miwebapp -P --mount type=bind,source=/home/phr4ckl0t/Documents/Codigo,target=/app jorge07/alpine-php

3. Para verificar el puerto random al que bindea el contenedor con mi host y mirar la IP del contenedor hice lo siguiente:
    docker container inspect miwebapp

4. Del paso 3 obtuve que la IP que era 172.17.0.2 y el puerto expuesto que era el 32774

5. En el web browser  de mi host pongo en la barra de direcciones:
    No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

El problema es que no logra conectar por lo que el navegador me tira un unable to connect al momento de visualizar el contenido de mi archivo index.php, según el tutorial en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta en el terce enlace (simple web app) deberia bastar, e intentado otras cosas que he encontrado en la red como añadir el contenedor a la misma red del host con --network, he seteado los puertos manualmente con -p <host>:<container> etc..., probé con otra imagen que tuviera un apache dentro pensando que quizá era por que la que uso no tiene un web server escuchando en x puerto y el resultado es el mismo. Para asegurarme de que en realidad el archivo esta en el contenedor abro una consola con docker exec -it miwebapp /bin/sh y me desplazo hacia el directorio /app y efectivamente si está montado el contenido que comparto desde mi host.

Esta es mi docker info:

Containers: 1
Running: 1
Paused: 0
Stopped: 0
Images: 3
Server Version: 17.09.0-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 06b9cb35161009dcb7123345749fef02f7cea8e0
runc version: 3f2f8b84a77f73d38244dd690525642a72156c64
init version: 949e6fa
Security Options:
seccomp
  Profile: default
Kernel Version: 4.13.5-1-ARCH
Operating System: Arch Linux
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 15.61GiB
Name: robbie
ID: LOQC:2333:5VCJ:Z5EU:5NVM:VXRQ:3JII:XOWU:SWSO:2FR5:MCDJ:MOG5
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Username: phr4ckl0t
Registry: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

y esta es la del container:

CONTAINER ID      IMAGE                     COMMAND             CREATED                  STATUS                   PORTS                              NAMES
bea5cc95f427        jorge07/alpine-php   "/sbin/tini -- /us..."   About a minute ago   Up About a minute   0.0.0.0:32774->9000/tcp   webapp


Cualquier ayuda es bien recibida, la agradezco demasiado. Seguiré investigando a ver si encuentro algo.

Puedes probar con una de las dos opciones:


1.- Levantando el docker con el puerto redirigido

Código: bash
docker run -d -p 32774:32774 --name webapp webapp


2.- IPTABLES


Código: bash
 iptables -t nat -A  DOCKER -p tcp --dport 32774 -j DNAT --to-destination 172.17.0.19:32774



La primera opción la había probado antes pero no dió resultado, y la segunda supuse que quizá era problema de reglas con el firewall pero no probé nada hasta ahora que lo mencionas, primero listé las cadenas y las reglas que tenia y me di cuenta que ya hay unas agregadas, aún así probe como me lo planteas pero sigo sin poder tener acceso. Es desesperante jaja.

Ya solucioné el inconveniente, no se por qué como lo planeaba blackdrake no resultaba, lo que hize fue bajar un momento el servicio de iptables para comprobar que fuera él quien generaba el problema. Y efectivamente era él, así que como tenía el iptables por defecto solo habían unas cuantas reglas de docker, luego al intentar iniciar el servicio de nuevo me encuentro que no es capaz de iniciar, buscando y bucando me encuentro con la sorpresa de que ya no esta el archivo /etc/iptables/iptables.rules vaya yo a saber por qué se eliminó, luego lo que hize fue crear un archivo con el mismo nombre pero con el contenido del archivo /etc/iptables/empty.rules y tras reiniciar el servicio de docker se añadieron nuevas cadenas al iptables, pero despues de eso pude por fin navegar en el sitio web alojado en el contenedor desde el equipo host. No tengo 100% claro que fue lo que sucedió pero me funcionó.