我需要在docker容器中同时使用java和python来运行一些代码。
这是我的dockerfile:如果我不添加 FROM openjdk:slim,* 它将正常运行 *
#get python FROM python:3.6-slim RUN pip install --trusted-host pypi.python.org flask #get openjdk FROM openjdk:slim COPY . /targetdir WORKDIR /targetdir # Make port 81 available to the world outside this container EXPOSE 81 CMD ["python", "test.py"]
test.py应用程序位于同一目录中:
from flask import Flask import os app = Flask(__name__) @app.route("/") def hello(): html = "<h3>Test:{test}</h3>" test = os.environ['JAVA_HOME'] return html.format(test = test) if __name__ == '__main__': app.run(debug=True,host='0.0.0.0',port=81)
我收到此错误:
D:\MyApps\Docker Toolbox\Docker Toolbox\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"python\": executable file not found in $PATH": unknown.
我到底在做什么错?我是Docker的新手,也许我错过了一步。
额外细节
我的目标
我必须运行一个运行Java文件的python程序。我正在使用的python库需要使用的路径JAVA_HOME。
JAVA_HOME
我的问题:
我不懂Java,所以无法正确运行文件。
我的整个代码都是用Python编写的,除了Java代码
Python包装器以我需要它运行的方式来运行文件。
我认为我的方法行不通,因为我没有基本的Linux版本。
所以它是这样的:
可选 :查找并设置JAVA_HOME
docker exec -it [COINTAINER ID] bin/bash
这是最终的Dockerfile(它应该与问题中的python代码一起使用):
### 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"]
我是Docker的新手,所以这可能不是最好的解决方案。我愿意提出建议。