Puede que se de el caso de que halles algún fallo en tu código o trabajo, recuerda probar siempre en un entorno de testing antes aplicar el código al proyecto final.
Solución:
OK me tomó un poco de tiempo para averiguarlo. Y mi agradecimiento va a esta respuesta.
Creo que mi enfoque no funcionó porque no tenía una versión básica de Linux.
Así que va así:
- Obtenga Linux (estoy usando Alpine porque es básico)
- Obtenga Java a través del administrador de paquetes
- Obtener Python, PIP
OPCIONAL: busque y configure JAVA_HOME
- Encuentra la ruta a JAVA_HOME. Tal vez haya una mejor manera de hacer esto, pero lo hice ejecutando el contenedor, luego miré dentro del contenedor usando
docker exec -it [COINTAINER ID] bin/bash
y lo encontré - Colocar
JAVA_HOME
en dockerfile y build + ejecutarlo todo de nuevo
Aquí está el Dockerfile final (debería funcionar con el código python en la pregunta):
### 1. Get Linux
FROM alpine:3.7
### 2. Get Java via the package manager
RUN apk update
&& apk upgrade
&& apk add --no-cache bash
&& apk add --no-cache --virtual=build-dependencies unzip
&& apk add --no-cache curl
&& apk add --no-cache openjdk8-jre
### 3. Get Python, PIP
RUN apk add --no-cache python3
&& python3 -m ensurepip
&& pip3 install --upgrade pip setuptools
&& rm -r /usr/lib/python*/ensurepip &&
if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi &&
if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi &&
rm -r /root/.cache
### Get Flask for the app
RUN pip install --trusted-host pypi.python.org flask
####
#### OPTIONAL : 4. SET JAVA_HOME environment variable, uncomment the line below if you need it
#ENV JAVA_HOME="/usr/lib/jvm/java-1.8-openjdk"
####
EXPOSE 81
ADD test.py /
CMD ["python", "test.py"]
Soy nuevo en Docker, por lo que esta puede no ser la mejor solución posible. Estoy abierto a sugerencias.
ACTUALIZACIÓN: PROBLEMAS COMUNES
- Dificultad para usar paquetes de python
Como Joabe Lucena señaló aquí, Alpine puede tener problemas con ciertos paquetes de python. Le recomiendo que use una distribución de Linux que funcione mejor para usted, por ejemplo, centos.
Una solución más fácil para el problema anterior es usar contenedores docker de varias etapas donde puede copiar el contenido de uno a otro. En el caso anterior se puede tener openjdk:slim
como contenedor base y luego use el contenido de un contenedor de python para copiarlo en este contenedor base de la siguiente manera:
FROM openjdk:slim
COPY --from=python:3.6 / /
...
...
Esta característica está disponible a partir de Docker 17.05 y hay más cosas que puede hacer usando la compilación de varias etapas, como copiar solo el contenido que necesita de uno a otro.
Documentación de referencia
Otra alternativa es simplemente utilizar imagen docker-java-python desde el centro de la ventana acoplable. https://hub.docker.com/r/rappdw/docker-java-python
FROM rappdw/docker-java-python:openjdk1.8.0_171-python3.6.6
RUN java -version
RUN python --version
Calificaciones y reseñas
Más adelante puedes encontrar las referencias de otros usuarios, tú todavía puedes insertar el tuyo si dominas el tema.