Solución:
Existen algunas posibilidades para comprobar si su aplicación se está ejecutando.
API remota
Como JimiDini dicho, una posibilidad es la API remota de Docker. Puede usarlo para ver todos los contenedores en ejecución (cuál sería su caso de uso, ¿verdad?), Inspeccionar un contenedor determinado o iniciar y detener contenedores. La API es una REST-API con varios enlaces para lenguajes de programación (en https://docs.docker.io/reference/api/remote_api_client_libraries/). Algunos de ellos están muy desactualizados. Para usar la API remota de Docker desde otra máquina, necesitaba abrirla explícitamente:
docker -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock -d &
¡Tenga en cuenta que la API está abierta al mundo ahora! En un escenario real, necesitaría protegerlo de alguna manera (por ejemplo, vea el ejemplo en http://java.dzone.com/articles/securing-docker%E2%80%99s-remote-api).
Docker PS
Para ver todos los contenedores en ejecución ejecutar docker ps
en su anfitrión. Esto mostrará una lista de todos los contenedores en ejecución. Si no ve su aplicación, no se está ejecutando. También le muestra los puertos que está exponiendo su aplicación. También puede hacer esto a través de la API remota.
Registros
También puede consultar los registros. Tu puedes correr docker attach <container id>
para adjuntar a un contenedor determinado y ver su stdout. Puedes correr también correr docker logs <container id>
para recibir los registros de Docker. Lo que prefiero es escribir los registros en un directorio determinado, por ejemplo, todos los registros en /var/log
y monte esta carpeta en mi máquina host. Entonces todos tus registros terminarán en /home/ubuntu/docker-logs
en su anfitrión.
docker run -p 80:8080 -v /home/ubuntu/docker-logs:/var/log:rw my/application
Una palabra para puertos e IP
Cada contenedor obtendrá su propia dirección IP. Puede verificar esta dirección IP a través de la API remota o directamente a través de Docker en la máquina host. También puede especificar un determinado nombre de host para el contenedor (pasando el --hostname="test42"
al run
mando). Sin embargo, la mayoría de las veces no lo necesitaba.
Para acceder a la aplicación en el contenedor, debe abrir el puerto en el contenedor y vincularse a un puerto en el host.
En su Dockerfile necesita EXPOSE
el puerto en el que se ejecuta su aplicación:
FROM ubuntu
...
EXPOSE 8080
CMD run-my-app.sh
Cuando inicie su contenedor, debe vincular este puerto a un puerto del host:
docker run -p 80:8080 my/application
Ahora puede acceder a su aplicación en http://localhost:80
o http://127.0.0.1:80
.
Si su aplicación no responde, verifique si el contenedor se está ejecutando escribiendo docker ps
o la API remota. Si no se está ejecutando, compruebe los registros para averiguar el motivo.
(Nota: si ejecuta su máquina virtual de Ubuntu en algo como VirtualBox e intenta acceder a ella desde su máquina Windows, ¡asegúrese de abrir los puertos en VirtualBox también!).
El contenedor Docker tiene una dirección IP separada. Por defecto es privado (accesible solo desde la máquina host).
Docker proporciona todos los metadatos (incluida la dirección IP) a través de su API:
- https://docs.docker.io/reference/api/docker_remote_api_v1.10/#inspect-a-container
- https://docs.docker.io/reference/api/docker_remote_api_v1.10/#monitor-docker-s-events
También puede echar un vistazo a una pequeña herramienta llamada docker-gen para inspirarse. Supervisa los eventos de la ventana acoplable y crea archivos de configuración en la máquina host utilizando plantillas.
Para obtener la dirección IP de un contenedor docker, si conoce su id (una cadena hexadecimal larga) o si lo nombró:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-id-or-name>