我有以下 docker 文件,基本映像 rundeckpro/runner:latest;它没有安装Python。镜像构建后,有两个版本的python:python3.10和python3.11,尽管我只请求了python3.11。这有什么原因吗?我可以避免这种情况吗?
ARG RUNNER_VERSION=latest
FROM rundeckpro/runner:${RUNNER_VERSION}
ARG PYTHON_VERSION=python3.11
ARG DEBIAN_FRONTEND=noninteractive
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends software-properties-common && \
apt-get install -y --no-install-recommends gpg-agent && \
add-apt-repository -y ppa:deadsnakes/ppa && \
apt-get install -y --no-install-recommends $PYTHON_VERSION && \
apt-get install -y --no-install-recommends $PYTHON_VERSION-venv && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
USER runner
答案1
rundeckpro/runner
目前基于Ubuntu 22.04,22.04中Python的默认版本是3.10。software-properties-common
依赖于 Python,因此安装最终会安装python3.10
.
因为你只需要software-properties-common
安装死蛇 PPA,您可以在安装 PPA 后将其删除:
RUN apt-get update && \
apt-get install -y --no-install-recommends software-properties-common gpg-agent && \
add-apt-repository -y ppa:deadsnakes/ppa && \
apt-get purge -y --autoremove software-properties-common gpg-agent && \
apt-get install -y --no-install-recommends $PYTHON_VERSION && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
这会给你python3.11
但不会python3.10
。
不幸的是python3.11-venv
,即使在死蛇 PPA 中,也取决于,从而python3-distutils
拉入。python3
python3.10
另外,不要费心寻找替代方案,Python 包不使用它们;如果需要python3
,请链接:
ln -sf python3.11 /usr/bin/python3
(但请注意,如果python3
安装了该软件包,这可能会破坏某些东西 - 如果某个软件包需要该python3
软件包,则应单独保留符号链接,并python3.11
显式使用)。