直到大约一周前,我成功地使用了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