我在上部署了一个Python项目。由于项目依赖于Java,所以我使用了一个Docker容器来配置两个环境: Python + Java。
但是,当我在GAE中调用我的"java
服务时,从这个Python过程中找不到java
**“命令,请确保安装了并为错误设置了路径*。
在构建Docker文件的过程中,我能够在安装Java之后访问它。但是在API执行期间,Python无法识别它。
"app.yaml“文件使用:
runtime: custom
env: flex
entrypoint: gunicorn -w 4 -k uvicorn.workers.UvicornWorker src.main:app
下面是部署中使用的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
命令的打印输出:运行java -version命令
有人知道为什么即使Python和Java运行在happening上相同的服务上也会发生错误吗?是否缺少其他设置?
发布于 2021-06-06 22:07:28
您正在一个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安装它。
https://stackoverflow.com/questions/67863595
复制相似问题