无法在docker build中升级pip

在运行Docker构build(使用Jenkins CI)时,升级pip(docker文件的最后一行)失败。 我需要它升级版本8.1.1,因为它在日志中build议,因为我的部署在PIP版本不匹配失败。

Dockerfile

FROM ubuntu:14.04 FROM python:3.4 # Expose a port for gunicorn to listen on EXPOSE 8002 # Make a workdir and virtualenv WORKDIR /opt/documents_api # Install everything else ADD . /opt/documents_api # Set some environment varialbes for PIP installation and db management ENV CQLENG_ALLOW_SCHEMA_MANAGEMENT="True" RUN apt-get update RUN apt-get install -y python3-pip RUN pip3 install --upgrade pip 

这是错误:

 Step 15 : RUN pip3 install --upgrade pip 19:46:00 ---> Running in 84e2bcc850c0 19:46:04 Collecting pip 19:46:04 Downloading pip-8.1.1-py2.py3-none-any.whl (1.2MB) 19:46:04 Installing collected packages: pip 19:46:04 Found existing installation: pip 7.1.2 19:46:04 Uninstalling pip-7.1.2: 19:46:05 Successfully uninstalled pip-7.1.2 19:46:10 Exception: 19:46:10 Traceback (most recent call last): 19:46:10 File "/usr/local/lib/python3.4/shutil.py", line 424, in _rmtree_safe_fd 19:46:10 os.unlink(name, dir_fd=topfd) 19:46:10 FileNotFoundError: [Errno 2] No such file or directory: 'pip' 19:46:10 You are using pip version 7.1.2, however version 8.1.1 is available. 

当你使用两个FROM指令时,docker会创build两个输出图像,这就是为什么它被搞乱了。

首先, FROM ubuntu:14.04删除,并且不要在Dockerfile中进行apt-get update ,这是一个糟糕的做法(每次构build时,您的映像都会有所不同,从而破坏了Container / Docker的整个目的)。

其次,你可以检查官方的python图像Dockerfile来知道哪个版本的pip被安装,例如, python:3.4 (它已经是v8.1.1)。

第三,你的情况(外部应用程序)有一个特殊的图像: python:3.4-onbuild 。 你的Dockerfile可以简化为:

 FROM python:3.4-onbuild ENV CQLENG_ALLOW_SCHEMA_MANAGEMENT="True" EXPOSE 8002 CMD python myapp.py 

最后一点,尝试使用基于高山的图像,它们要小得多(对于Python来说,它比基于Ubuntu的小10倍 )。

事实certificate,我运行的主机没有外部(互联网)访问。 所以升级失败了。 我们通过在DTR中添加另一个包含必要版本的包来解决这个问题。

使用/ usr / bin /来运行pip。 例如:

 /usr/bin/pip install --upgrade pip