在 docker 中安装 pip
Posted
技术标签:
【中文标题】在 docker 中安装 pip【英文标题】:Install pip in docker 【发布时间】:2016-08-05 07:06:13 【问题描述】:我无法在 Docker 中安装 pip。
这是我的 Dockerfile:
FROM ubuntu:14.04
# Install dependencies
RUN apt-get update -y
RUN apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql python3.4 python-pip
构建时,我得到:
Sending build context to Docker daemon 109.6 kB
Step 1 : FROM ubuntu:14.04
---> b549a9959a66
Step 2 : RUN apt-get update -y
---> Using cache
---> 84577471562c
Step 3 : RUN apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql python3.4 python-pip
---> Running in 49252a6d0eb1
Reading package lists...
Building dependency tree...
Reading state information...
python3.4 is already the newest version.
The following extra packages will be installed:
apache2-bin apache2-data binutils build-essential ca-certificates cpp
cpp-4.8 dpkg-dev fakeroot g++ g++-4.8 gcc gcc-4.8 git-man krb5-locales
libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl
libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libasan0
libasn1-8-heimdal libatomic1 libc-dev-bin libc6-dev libcloog-isl4 libcurl3
libcurl3-gnutls libdpkg-perl libedit2 liberror-perl libfakeroot
libfile-fcntllock-perl libgcc-4.8-dev libgmp10 libgomp1 libgssapi-krb5-2
libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal
libheimntlm0-heimdal libhx509-5-heimdal libidn11 libisl10 libitm1
libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0
libldap-2.4-2 libmcrypt4 libmpc3 libmpfr4 libmysqlclient18 libpython-stdlib
libpython2.7-minimal libpython2.7-stdlib libquadmath0 libroken18-heimdal
librtmp0 libsasl2-2 libsasl2-modules libsasl2-modules-db libstdc++-4.8-dev
libtimedate-perl libtsan0 libwind0-heimdal libx11-6 libx11-data libxau6
libxcb1 libxdmcp6 libxext6 libxml2 libxmuu1 linux-libc-dev lsof make
manpages manpages-dev mysql-common openssh-client openssl patch php5-cli
php5-common php5-json php5-readline psmisc python python-chardet
python-chardet-whl python-colorama python-colorama-whl python-distlib
python-distlib-whl python-html5lib python-html5lib-whl python-minimal
python-pip-whl python-pkg-resources python-requests python-requests-whl
python-setuptools python-setuptools-whl python-six python-six-whl
python-urllib3 python-urllib3-whl python-wheel python2.7 python2.7-minimal
python3-pkg-resources rsync sgml-base ssl-cert xauth xml-core xz-utils
Suggested packages:
www-browser apache2-doc apache2-suexec-pristine apache2-suexec-custom ufw
apache2-utils binutils-doc cpp-doc gcc-4.8-locales debian-keyring
g++-multilib g++-4.8-multilib gcc-4.8-doc libstdc++6-4.8-dbg gcc-multilib
autoconf automake1.9 libtool flex bison gdb gcc-doc gcc-4.8-multilib
libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan0-dbg
libtsan0-dbg libquadmath0-dbg gettext-base git-daemon-run
git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch
git-bzr git-cvs git-mediawiki git-svn php-pear glibc-doc krb5-doc krb5-user
libmcrypt-dev mcrypt libsasl2-modules-otp libsasl2-modules-ldap
libsasl2-modules-sql libsasl2-modules-gssapi-mit
libsasl2-modules-gssapi-heimdal libstdc++-4.8-doc make-doc man-browser
ssh-askpass libpam-ssh keychain monkeysphere ed diffutils-doc
php5-user-cache python-doc python-tk python-genshi python-lxml
python-distribute python-distribute-doc python2.7-doc binfmt-support
python3-setuptools openssh-server sgml-base-doc openssl-blacklist debhelper
Recommended packages:
ssh-client python-dev-all
The following NEW packages will be installed:
apache2 apache2-bin apache2-data binutils build-essential ca-certificates
cpp cpp-4.8 curl dpkg-dev fakeroot g++ g++-4.8 gcc gcc-4.8 git git-man
krb5-locales libalgorithm-diff-perl libalgorithm-diff-xs-perl
libalgorithm-merge-perl libapache2-mod-php5 libapr1 libaprutil1
libaprutil1-dbd-sqlite3 libaprutil1-ldap libasan0 libasn1-8-heimdal
libatomic1 libc-dev-bin libc6-dev libcloog-isl4 libcurl3 libcurl3-gnutls
libdpkg-perl libedit2 liberror-perl libfakeroot libfile-fcntllock-perl
libgcc-4.8-dev libgmp10 libgomp1 libgssapi-krb5-2 libgssapi3-heimdal
libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal
libhx509-5-heimdal libidn11 libisl10 libitm1 libk5crypto3 libkeyutils1
libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 libmcrypt4
libmpc3 libmpfr4 libmysqlclient18 libpython-stdlib libpython2.7-minimal
libpython2.7-stdlib libquadmath0 libroken18-heimdal librtmp0 libsasl2-2
libsasl2-modules libsasl2-modules-db libstdc++-4.8-dev libtimedate-perl
libtsan0 libwind0-heimdal libx11-6 libx11-data libxau6 libxcb1 libxdmcp6
libxext6 libxml2 libxmuu1 linux-libc-dev lsof make manpages manpages-dev
mysql-common openssh-client openssl patch php5 php5-cli php5-common
php5-json php5-mcrypt php5-mysql php5-readline psmisc python python-chardet
python-chardet-whl python-colorama python-colorama-whl python-distlib
python-distlib-whl python-html5lib python-html5lib-whl python-minimal
python-pip python-pip-whl python-pkg-resources python-requests
python-requests-whl python-setuptools python-setuptools-whl python-six
python-six-whl python-urllib3 python-urllib3-whl python-wheel python2.7
python2.7-minimal python3-pkg-resources rsync sgml-base ssl-cert xauth
xml-core xz-utils
0 upgraded, 130 newly installed, 0 to remove and 4 not upgraded.
Need to get 61.9 MB of archives.
After this operation, 213 MB of additional disk space will be used.
Err http://archive.ubuntu.com/ubuntu/ trusty-updates/main libroken18-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1
Could not resolve 'archive.ubuntu.com'
Err http://archive.ubuntu.com/ubuntu/ trusty-updates/main libasn1-8-heimdal amd64 1.6~git20131207+dfsg-1ubuntu1.1
Could not resolve 'archive.ubuntu.com'
.
.
.
Err http://archive.ubuntu.com/ubuntu/ trusty-security/main python2.7 amd64 2.7.6-8ubuntu0.2
Could not resolve 'archive.ubuntu.com'
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/h/heimdal/libroken18-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb Could not resolve 'archive.ubuntu.com'
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/h/heimdal/libasn1-8-heimdal_1.6~git20131207+dfsg-1ubuntu1.1_amd64.deb Could not resolve 'archive.ubuntu.com'
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb5support0_1.12+dfsg-2ubuntu5.2_amd64.deb Could not resolve 'archive.ubuntu.com'
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/s/ssl-cert/ssl-cert_1.0.33_all.deb Could not resolve 'archive.ubuntu.com'
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
The command '/bin/sh -c apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql python3.4 python-pip' returned a non-zero code: 100
阅读了this answer,我尝试添加RUN "sh" "-c" "echo nameserver 8.8.8.8 >> /etc/resolv.conf"
这行——这次的错误是:
...
...
Reading state information...
E: Unable to locate package php5-mcrypt
E: Unable to locate package python-pip
The command '/bin/sh -c apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql python3.4 python-pip' returned a non-zero code: 100
我做错了什么?我看到有人声称我应该尝试不同版本的 Ubuntu,但切换到 13.1 并没有改变任何东西。
【问题讨论】:
你在什么平台上? 【参考方案1】:试试这个:
-
取消注释 /etc/default/docker 中的以下行
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
重启 Docker 服务 sudo service docker restart
删除缓存了无效 DNS 设置的所有图像。
重新编译,问题应该就解决了。
来自this question。
【讨论】:
不走运 - 我的系统上没有文件/etc/default/docker
(Mac OS X)
抱歉,这个被敲了【参考方案2】:
虽然T. Arboreus's answer 可能会解决解决“archive.ubuntu.com”的问题,但我认为您收到的最后一个错误表明它不知道包php5-mcrypt
和python-pip
。
尽管如此,你只用这两个包减少的 Dockerfile 对我有用(使用 Debian 8.4 和 Docker 1.11.0),但我不太确定是否会出现这种情况,因为我的主机系统与你的不同。
FROM ubuntu:14.04
# Install dependencies
RUN apt-get update && apt-get install -y \
php5-mcrypt \
python-pip
但是,根据this answer,您应该考虑在使用 Python 3.x 时安装 python3-pip
包而不是 python-pip
包。
此外,要使php5-mcrypt
包安装工作正常,您可能需要添加Universe 存储库,如right here 所示。我遇到了 Ubuntu Docker 映像中缺少 add-apt-repository
命令的问题,因此我首先安装了包 software-properties-common
以使该命令可用。
拆分语句并将apt-get update
和apt-get install
放入一个RUN
命令也建议here。
哦,顺便说一句,您实际上不需要 apt-get update
处的 -y
标志,因为没有什么需要自动确认。
最后:
FROM ubuntu:14.04
# Install dependencies
RUN apt-get update && apt-get install -y \
software-properties-common
RUN add-apt-repository universe
RUN apt-get update && apt-get install -y \
apache2 \
curl \
git \
libapache2-mod-php5 \
php5 \
php5-mcrypt \
php5-mysql \
python3.4 \
python3-pip
备注:使用的版本(例如 Ubuntu)将来可能会过时。
【讨论】:
感谢您的回复!我在 Mac OS X (10.11.4) 上,如果这有什么不同的话(尽管我认为 Docker 的全部意义在于它独立于底层系统运行?我对此很陌生,所以我可能错了...)。我现在就试试你的建议。 @CharlieParkerapt-get update
更新存储库中有关包的本地缓存信息(例如,在哪里下载它们或哪些版本可用)。没有,你可以例如遇到安装过时的软件包。另请参阅:askubuntu.com/questions/337198/… 我还将apt-get update
和apt-get install
编辑为一个RUN
命令,如下所示:docs.docker.com/engine/userguide/eng-image/…
在构建容器时需要 apt-get update 以防止缓存,请参阅 docker 文档。 -y 是防止提示说“是”,下载,防止构建出错【参考方案3】:
您可能想要更改 Docker 守护程序的 DNS 设置。您可以使用 dns 键编辑(或创建)/etc/docker/daemon.json
的配置文件,如
"dns": ["your_dns_address", "8.8.8.8"]
在上面的示例中,列表的第一个元素是您的 DNS 服务器的地址。第二项是谷歌的DNS,当第一项不可用时可以使用。
在继续之前,保存 daemon.json 并重启 docker 服务。
sudo service docker restart
修复后,重试运行构建命令。
【讨论】:
【参考方案4】:另一种方法是使用 Alpine Linux 容器,例如python:2.7-alpine
。他们提供开箱即用的pip
(并且占用空间更小,因此构建速度更快等)。
【讨论】:
【参考方案5】:这个命令对我来说很好用:
RUN apt-get -y install python3-pip
【讨论】:
【参考方案6】:如果以上都不起作用,
尝试:
sudo apt-get install python-pip python-dev
【讨论】:
以上是关于在 docker 中安装 pip的主要内容,如果未能解决你的问题,请参考以下文章