Dockerfile:多阶段构建不起作用,而且没有现成的Python3 + Alpine + Java镜像可用。

6 浏览
0 Comments

Dockerfile:多阶段构建不起作用,而且没有现成的Python3 + Alpine + Java镜像可用。

我正在将一个组件容器化。它需要Linux + Python和Java。

Linux + Python - 我正在使用Alpine 3.5和Python 3.5镜像。

这是我的Docker文件。

Dockerfile:

#
#       健康监控 Docker 文件
#
#ARG JAVA_BASE=1.0
#FROM csf-docker-delivered.repo.lab.pl.alcatel-lucent.com/java_base:17.6-1
#WORKDIR /etc/alternatives
#RUN CGO_ENABLED=0
FROM registry1-docker-io.repo.lab.pl.alcatel-lucent.com/python:3.5-alpine
#COPY --from=build  /etc/alternatives/* .
#RUN rm -rf /var/cache/apk/* && \
#    rm -rf /tmp/*
#
#RUN apk update
#
#RUN apk add --update --no-cache\
#    build-base \
#    openjdk8-jre \
#  && pip install virtualenv \
#  && rm -rf /var/cache/apk/*
#RUN apk update && apk upgrade && \
#    apk add openjdk8 && \
#    mkdir /tmp/tmprt && \
#    cd /tmp/tmprt && \
#    apk add zip && \
#    unzip -q /usr/lib/jvm/default-jvm/jre/lib/rt.jar && \
#    apk add zip && \
#    zip -q -r /tmp/rt.zip . && \
#    apk del zip && \
#    cd /tmp && \
#    mv rt.zip /usr/lib/jvm/default-jvm/jre/lib/rt.jar && \
#    rm -rf /tmp/tmprt /var/cache/apk/* bin/jjs bin/keytool bin/orbd bin/pack200 bin/policytool \
#          bin/rmid bin/rmiregistry bin/servertool bin/tnameserv bin/unpack200
COPY ./jdk-8u201-linux-x64.tar.gz /
RUN tar xf /jdk-8u201-linux-x64.tar.gz
ENV JAVA_HOME=/jdk1.8.0_201/bin
ENV NGDB_HOME /opt/nsn/ngdb
#RUN yum -y install openjdk-8-jdk-headless
#RUN apt-get install openjdk-8-jdk-headless
#COPY ./openjdk-8_8u181-b13.orig.tar.gz /
#RUN tar xf /openjdk-8_8u181-b13.orig.tar.gz
RUN mkdir -p /opt/nsn/ngdb/monitoring/scripts
RUN mkdir -p /opt/nsn/ngdb/monitoring/utils
RUN mkdir -p /var/local/monitoring/output
RUN mkdir -p /var/local/monitoring/work
RUN for directory in boundaryStatus postgresUsersCount backlogHadoop tableCount_Usage Dimension_Count tableCount_Day tableCount_Week tableCount_Month sendSummaryReport; do mkdir -p $directory;done
COPY ./utils/* /opt/nsn/ngdb/monitoring/utils/
COPY ./scripts/* /opt/nsn/ngdb/monitoring/scripts/
COPY ./conf/* /opt/nsn/ngdb/monitoring/conf/
COPY ./postgresql-9.2-1004.jdbc4.jar /opt/nsn/ngdb/monitoring/utils/
RUN mkdir -p /opt/nsn/ngdb/monitoring/python-dependencies
COPY ./html3-1.17.tar.gz /opt/nsn/ngdb/monitoring/python-dependencies
COPY ./py4j-0.10.8.1.zip /opt/nsn/ngdb/monitoring/python-dependencies
#RUN tar xf /opt/nsn/ngdb/monitoring/python-dependencies/html3-1.17.tar.gz
#WORKDIR /html3-1.17/
#RUN python /html3-1.17/setup.py install
RUN unzip /opt/nsn/ngdb/monitoring/python-dependencies/py4j-0.10.8.1.zip
WORKDIR /py4j-0.10.8.1
RUN python /py4j-0.10.8.1/setup.py install

但是,如果我尝试使用"FROM"添加Java镜像和Python Alpine镜像,我只能得到一个东西放在我的容器中。

当我搜索时,我了解到了多阶段构建,但是当我像下面这样做时,它会抛出一个错误"Unknown flag: from"。

FROM csf-docker-delivered.repo.lab.pl.alcatel-lucent.com/java_base:17.6-1
WORKDIR /etc/alternatives
FROM registry1-docker-io.repo.lab.pl.alcatel-lucent.com/python:3.5-alpine
COPY --from=0 /etc/alternatives/* .

有人可以帮助我吗?

此外,

我正在尝试安装py4j作为一个外部模块,通过它我调用Java类。

我设置了WORKDIR,然后安装py4j模块进行顺利。

然后,如果我尝试将WORKDIR设置为其他模块,例如:html,并尝试

RUN python setup.py install

它会报错"找不到文件或目录"。

你能帮助我吗?

0