【问题标题】:On openjdk:7-jre-alpine docker how to install python 3.6在 openjdk:7-jre-alpine docker 上如何安装 python 3.6
【发布时间】:2018-10-02 10:21:43
【问题描述】:

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

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/main\nhttp://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:7-jre-alpine docker 上安装 python 3.6 [或我想要的任何版本]?

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

【问题讨论】:

    标签: java python-3.x docker alpine


    【解决方案1】:

    花了几个小时尝试了许多不同的选项,包括在多个版本中重新安装 docker。我设法让下面的 Dockefile 工作。请注意,我必须重复构建几次。我的理论是我的 WIFI 或网络或 VPN 导致超时。在我的 mac 的本地 docker repo 上成功构建后,我尝试在 minikube 上使用 virtualbox vm 进行相同的构建,并且在重复相同的构建几次并注意到错误沿着脚本进一步发生后它工作。

    这是 Dockerfile 的价值:

    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
    

    【讨论】:

      【解决方案2】:

      这个 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
      

      我从here 复制粘贴了 python 3.6 alpine 图像,但由于第 33-34 行已损坏,因此不得不删除它们。如果您要在生产中使用它,请考虑到这一点。 快乐的蟒蛇。

      【讨论】:

      • 报错,可能是升级后我的docker安装有问题
      • 你在什么环境下运行它?我正在使用 docker for mac 版本 - 18.03.0-ce-mac60
      • 现在 18.03.0-ce 在 mac 上。我一直在重新安装所有组件 [virtualbox, minikube] 并使用 docker 和 vm 进行测试,
      • 刚刚又试了一次,这次是在运行 17.12.1-ce 的 ubuntu 机器上,似乎工作正常。也许您可以尝试一下,因为您最终可能最终会在 linux 机器上运行您的容器,不是吗?
      • virtualbox minikube 是 linux
      【解决方案3】:
      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/Dockerfile

      【讨论】:

        猜你喜欢
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-30
        • 2016-11-28
        • 2020-01-07
        • 1970-01-01
        相关资源
        最近更新 更多