在运行Docker构建(使用Jenkins CI)时,它无法升级pip(docker文件的最后一行)。我需要它来升级版本8.1.1(如日志中所建议),因为在PIP版本不匹配时我的部署失败。
Docker文件
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创建了两个输出图像,这就是为什么将其弄乱了的原因。
首先,删除Dockert文件中的FROM ubuntu:14.04
而不是apt-get update
,这是一个不好的做法(每次构建时,您的镜像都会有所不同,从而破坏了容器/ 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
最后一件事,尝试使用基于 Alpine 的图像,它们要小得多(对于python,它比基于ubuntu的almost 10 time smaller)。
关于docker - 无法升级docker build中的pip,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37014848/