我无法在基于ubuntu的docker容器中固定python和nodejs的版本。
我遇到困难的原因是因为容器中可用的软件包版本会因主机而异。
我想通过添加以下命令在Dockerfile中指定哪些版本的python和nodejs debian包:
RUN apt-get -y install "python=2.7.5-5ubuntu3" build-essential "nodejs=6.1.0-1nodesource1~trusty1" vim jq
我通过在我的OSX el-capitan笔记本电脑上本地运行的ubuntu容器中运行一些apt-cache madison
命令来确定那些版本字符串。一切正常。当我尝试在Amazon Linux实例上运行的CI环境中构建相同的容器时,它会失败,因为命名版本不可用。
这是一些显示正在发生的事情的输出。
OSX El Capitan(通过docker-machine VBOX包装器)
$ uname -a
Darwin Kyles-MacBook-Pro.local 15.3.0 Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 x86_64
$ # now get into the container
$ docker exec -it named_container bash
root@79a839297d7e:/src# apt-cache madison nodejs
nodejs | 6.1.0-1nodesource1~trusty1 | https://deb.nodesource.com/node_6.x/ trusty/main amd64 Packages
nodejs | 0.10.25~dfsg2-2ubuntu1 | http://archive.ubuntu.com/ubuntu/ trusty/universe amd64 Packages
nodejs | 0.10.25~dfsg2-2ubuntu1 | http://archive.ubuntu.com/ubuntu/ trusty/universe Sources
nodejs | 6.1.0-1nodesource1~trusty1 | https://deb.nodesource.com/node_6.x/ trusty/main Sources
root@79a839297d7e:/src# apt-cache madison python
python | 2.7.5-5ubuntu3 | http://archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
python-defaults | 2.7.5-5ubuntu3 | http://archive.ubuntu.com/ubuntu/ trusty/main Sources
CI环境中的相同序列 - 在AMI Linux上:
$ uname -a
Linux ip-10-250-160-248 4.4.8-20.46.amzn1.x86_64 #1 SMP Wed Apr 27 19:28:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ # now get into the container
$ docker exec -it named_container bash
root@8344a5f311fe:/src# apt-cache madison nodejs
nodejs | 6.1.0-1nodesource1~xenial1 | https://deb.nodesource.com/node_6.x xenial/main amd64 Packages
nodejs | 4.2.6~dfsg-1ubuntu4 | http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
nodejs | 4.2.6~dfsg-1ubuntu4 | http://archive.ubuntu.com/ubuntu xenial/universe Sources
nodejs | 6.1.0-1nodesource1~xenial1 | https://deb.nodesource.com/node_6.x xenial/main Sources
$ root@8344a5f311fe:/src# apt-cache madison python
python | 2.7.11-1 | http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages
python-defaults | 2.7.11-1 | http://archive.ubuntu.com/ubuntu xenial/main Sources
以下是Dockerfile的开头,我更改了ENTRYPOINT和CMD,因为它们与此问题无关
FROM ubuntu
MAINTAINER Kyle Zeeuwen
RUN apt-get update
RUN apt-get -y install curl
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get -y install "python=2.7.5-5ubuntu3" build-essential "nodejs=6.1.0-1nodesource1~trusty1" vim jq
CMD ["sleep", "3600"]
所以我的问题:
我需要更改以可靠地设置python和nodejs版本,以便docker容器构建可以在包括OSX和Linux AMI在内的一系列主机环境中工作
是什么让Ubuntu报告不同的发行版?
答案 0 :(得分:2)
版本不匹配有两个可能的原因:
docker pull ubuntu
,或使用其他--pull
标记进行构建。apt-get update
步骤被缓存,缓存在一台机器上比在另一台机器上更旧。您不应该在没有任何其他命令的情况下运行apt-get update
,因为缓存永远不会失效。相反,请RUN apt-get update && apt-get -y install curl
。您还可以运行docker build --no-cache
以确保不使用任何缓存。简而言之:docker build --pull --no-cache
应该解决您的问题,但您也应该按照上面的说明调整您的Dockerfile。