Quiero ejecutar el servidor Python HTTP en el contenedor docker.
Mi DockerFile se ve así:
FROM continuumio/anaconda3:latest RUN apt-get -y update RUN apt-get -y install linux-headers-amd64 build-essential libc-dev gcc RUN conda install --yes gcc RUN conda install --yes numpy RUN conda install --yes scipy RUN conda install --yes gensim RUN pip install annoy RUN conda config --add channels conda-forge RUN conda install --yes spacy RUN mkdir -p /usr/src/app WORKDIR /usr/src/app ADD my-app.tar /usr/src/app WORKDIR /usr/src/app/sourceConstruyo la imagen con:
docker build -t my-app-poc .Inicie el contenedor e ingrese el comando:
docker run -i -t -p 9998:9998En el bash de la imagen de Docker, ejecuto el script:
python Service.pyQue comienza correctamente:
Wed Apr 5 13:09:51 2017 Server Starts - :9998Pero cuando ingreso la dirección en mi host:
http://localhost:9998 No pasa nada. También intenté poner EXPOSE 9998 al final de mi DockerFile pero no fue de ayuda.
Si ingreso la dirección de la docker-machine en mi host:
http://192.168.99.100:9989/funciona. Pero quiero ejecutar esa imagen en un servidor normal, no en mi máquina local, por lo que todo debería estar expuesto a localhost.
Lo probé en Windows 7.
¿Tienes alguna idea de cómo ejecutar esto?
¡Estaré muy contento por tu ayuda!
Esto puede o no estar relacionado, pero no puedo agregar un comentario, ¡así que obtienes una respuesta independiente!
En el contenedor Docker, es posible que deba vincular su aplicación al host 0.0.0.0 . Ver este enlace.
Me parece (aunque tendría que saber más sobre la aplicación para estar seguro) que está buscando una conexión en la interfaz de bucle invertido. Esto expone al oyente solo a la máquina local. Por el contrario, 0.0.0.0 sirve para exponer al oyente a todas las interfaces de red de la máquina. Concretamente en este caso, el adaptador de red docker. Para una explicación más detallada, vea este post.
Lo que describiste es un comportamiento normal. Las imágenes de Docker se ejecutan en un entorno virtualizado, por lo que no pueden compartir la dirección de bucle invertido. Lo que debe hacer es redirigir el tráfico de su servidor a su imagen acoplable.
Esta página de documentación debe tener todas las respuestas que necesita.
¡Buena suerte!
Desde https://docs.docker.com/engine/reference/run/#expose-incoming-ports
La opción de exposición -p también puede tomar una dirección IP. Si desea enlazar también a 127.0.0.1, vaya allí.
intente algo como: -p 127.0.0.1:9998:9998