谷歌应用程序引擎:在使用Docker的Flex环境中,Python无法识别JAVA命令(在此Python进程中找不到`J



我在谷歌应用引擎上部署了一个Python项目。由于该项目依赖Java,我使用Docker容器配置了两个环境:Python+Java。

然而,当我在GAE中调用我的Python服务时java命令在此Python进程中找不到。请确保安装了Java并且为CCD_ 2"设置了PATH;错误

在Docker文件的构建过程中,我可以在安装后访问Java,但在API执行过程中,Python无法识别。

";app.yaml";使用的文件:

runtime: custom
env: flex
entrypoint: gunicorn -w 4 -k uvicorn.workers.UvicornWorker src.main:app

以下是Deploy:中使用的Docker文件

### 1. Get Linux
FROM alpine:3.7

# Default to UTF-8 file.encoding
ENV LANG C.UTF-8
### 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
#### 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"
RUN export JAVA_HOME
ENV PATH $PATH:$JAVA_HOME/bin
RUN export PATH
RUN find / -name "java"
RUN java -version  
FROM python:3.7
EXPOSE 8080
ENV APP_HOME /src
WORKDIR /src
COPY requirements.txt ./requirements.txt
RUN pip3 install -r requirements.txt
COPY . /src
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8080"]

以下是部署过程中RUN java -version命令的打印输出:RUN java-版本命令

有人知道为什么即使Python和Java在App Engine上的同一服务上运行也会出现错误吗?是否缺少其他设置?

您在Dockerfile中使用了两个FROM,所以您实际上是在进行多阶段Docker构建,但您做得不对。多阶段构建应该是这样的:

### 1. Get Linux
FROM alpine:3.7 as build
# here you install with apk and build your Java program
FROM python:3.7
EXPOSE 8080 
...
# here you copy what you need from the previous Docker build, though 
# since it was Java, which is not installed here anymore because it is
# a python image, you need to consider if you really need a multi-stage 
# build 
COPY --from=builder /src /src

否则,只需卸下第二个FROM python:3.7并使用apk安装即可。

最新更新