在OpenJDK上:7-JRE-Alpine Docker如何安装Python 3.6



直到大约一周前,我成功地使用了python 3.6脚本在这样的Java图像上:

FROM openjdk:7-jre-alpine
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 go
RUN apk add --no-cache python3 && 
    python3 -m ensurepip && 
    rm -r /usr/lib/python*/ensurepip && 
    pip3 install --upgrade pip setuptools && 
    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 && 
    pip install kubernetes

现在,此Dockerfile在线路上失败

&& apk add --no-cache bash 

我发现的唯一解决方案是评论构建依赖关系并将其带来:

    && echo -e "http://nl.alpinelinux.org/alpine/v3.5/mainnhttp://nl.alpinelinux.org/alpine/v3.5/community" > /etc/apk/repositories 
&& apk add --no-cache bash 
#&& apk add --no-cache --virtual=build-dependencies unzip 

此修复程序安装Python版本3.52而不是3.6

如何在OpenJDK上安装Python 3.6 [或我想要的任何版本]:7-JRE-ALPINE DOCKER?

更新:现在所有的高山选项都失败

花了几个小时尝试许多不同的选项,包括重新安装docker以多个版本。我设法让Dockefile下面工作。请注意,我必须重复几次构建。我的理论是我的WiFi,网络或VPN引起了超时。在Mac的本地Docker存储库上成功构建后,我在Minikube上使用VirtualBox VM尝试了同样的尝试,并且在重复相同的构建几次后起作用,并注意到错误沿脚本发生了。

这是值得的码头:

FROM alpine:3.7
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 openjdk7-jre
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

RUN pip install kubernetes

此Dockerfile似乎在OpenJDK图像上安装了Python 3.6.5。

FROM openjdk:7-jre-alpine
# ensure local python is preferred over distribution python
ENV PATH /usr/local/bin:$PATH
# http://bugs.python.org/issue19846
# > At the moment, setting "LANG=C" on a Linux system *fundamentally breaks Python 3*, and that's not OK.
ENV LANG C.UTF-8
# install ca-certificates so that HTTPS works consistently
# the other runtime dependencies for Python are installed later
RUN apk add --no-cache ca-certificates
ENV GPG_KEY 0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D
ENV PYTHON_VERSION 3.6.5
RUN set -ex 
    && apk add --no-cache --virtual .fetch-deps 
        gnupg 
        libressl 
        tar 
        xz 
    
    && wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" 
    && wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" 
    && export GNUPGHOME="$(mktemp -d)" 
    && rm -rf "$GNUPGHOME" python.tar.xz.asc 
    && mkdir -p /usr/src/python 
    && tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz 
    && rm python.tar.xz 
    
    && apk add --no-cache --virtual .build-deps  
        bzip2-dev 
        coreutils 
        dpkg-dev dpkg 
        expat-dev 
        gcc 
        gdbm-dev 
        libc-dev 
        libffi-dev 
        libnsl-dev 
        libtirpc-dev 
        linux-headers 
        make 
        ncurses-dev 
        libressl 
        libressl-dev 
        pax-utils 
        readline-dev 
        sqlite-dev 
        tcl-dev 
        tk 
        tk-dev 
        xz-dev 
        zlib-dev 
# add build deps before removing fetch deps in case there's overlap
    && apk del .fetch-deps 
    
    && cd /usr/src/python 
    && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" 
    && ./configure 
        --build="$gnuArch" 
        --enable-loadable-sqlite-extensions 
        --enable-shared 
        --with-system-expat 
        --with-system-ffi 
        --without-ensurepip 
    && make -j "$(nproc)" 
# set thread stack size to 1MB so we don't segfault before we hit sys.getrecursionlimit()
# https://github.com/alpinelinux/aports/commit/2026e1259422d4e0cf92391ca2d3844356c649d0
        EXTRA_CFLAGS="-DTHREAD_STACK_SIZE=0x100000" 
    && make install 
    
    && runDeps="$( 
        scanelf --needed --nobanner --format '%n#p' --recursive /usr/local 
            | tr ',' 'n' 
            | sort -u 
            | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' 
    )" 
    && apk add --virtual .python-rundeps $runDeps 
    && apk del .build-deps 
    
    && find /usr/local -depth 
        ( 
            ( -type d -a ( -name test -o -name tests ) ) 
            -o 
            ( -type f -a ( -name '*.pyc' -o -name '*.pyo' ) ) 
        ) -exec rm -rf '{}' + 
    && rm -rf /usr/src/python
# make some useful symlinks that are expected to exist
RUN cd /usr/local/bin 
    && ln -s idle3 idle 
    && ln -s pydoc3 pydoc 
    && ln -s python3 python 
    && ln -s python3-config python-config
# if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value '<VERSION>'"
ENV PYTHON_PIP_VERSION 10.0.1
RUN set -ex; 
    
    apk add --no-cache --virtual .fetch-deps libressl; 
    
    wget -O get-pip.py 'https://bootstrap.pypa.io/get-pip.py'; 
    
    apk del .fetch-deps; 
    
    python get-pip.py 
        --disable-pip-version-check 
        --no-cache-dir 
        "pip==$PYTHON_PIP_VERSION" 
    ; 
    pip --version; 
    
    find /usr/local -depth 
        ( 
            ( -type d -a ( -name test -o -name tests ) ) 
            -o 
            ( -type f -a ( -name '*.pyc' -o -name '*.pyo' ) ) 
        ) -exec rm -rf '{}' +; 
    rm -f get-pip.py

i从这里复制了Python 3.6高山图像,但在破损时必须删除行33-34。如果您要在生产中使用它,请考虑到这一点。快乐的pythoning。

ENV PYTHONUNBUFFERED=1
RUN echo "**** install Python ****" && 
    apk add --no-cache python3 && 
    if [ ! -e /usr/bin/python ]; then ln -sf python3 /usr/bin/python ; fi && 
    
    echo "**** install pip ****" && 
    python3 -m ensurepip && 
    rm -r /usr/lib/python*/ensurepip && 
    pip3 install --no-cache --upgrade pip setuptools wheel && 
    if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi

来源,https://github.com/docker-hub-frolvlad/docker-alpine-python3/blob/master/master/dockerfile

最新更新