2016-05-11 1 views
1

У меня возникли проблемы с закреплением версии python и nodejs в контейнере докеров-контейнеров ubuntu.Доступные версии пакетов внутри контейнера ubuntu docker меняются в зависимости от ОС хоста

Причина, по которой я испытываю трудности, состоит в том, что версии пакетов, доступные в контейнере, меняются в зависимости от хоста.

Я хочу, чтобы указать в Dockerfile каких версии питона и nodejs DEBiAN пакетов, добавив следующую команду:

RUN apt-get -y install "python=2.7.5-5ubuntu3" build-essential "nodejs=6.1.0-1nodesource1~trusty1" vim jq 

Я определил эти строки версии, выполнив некоторые apt-cache madison команд внутри Ubuntu контейнера работает локально на моем ноутбуке OSX el-capitan. Все работает. Когда я пытаюсь создать тот же контейнер в среде CI, запущенной на экземпляре Amazon Linux, он терпит неудачу, потому что именованные версии недоступны.

Вот несколько результатов, которые показывают, что происходит.

OSX El Capitan (через 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 
[email protected]:/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 

[email protected]:/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 
[email protected]:/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 

$ [email protected]:/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"] 

Так что мой квест ионы:

  1. Что мне нужно изменить, чтобы надежно установить питона и nodejs версию такой, что Докер контейнер сборка будет работать в различных средах хозяевах включая как OSX и Linux AMI

  2. Что такое что произойдет, если Ubuntu сообщит о разных дистрибутивах?

ответ

2

Есть две возможные причины, почему версии не соответствуют:

  1. базовая версия изображения: Базовый образ не уточненный на одной из машин. Обязательно запустите docker pull ubuntu перед сборкой или создайте дополнительный флаг --pull.
  2. Кэш докера: шаг apt-get update кэшируется, а кеш старше на одной машине, чем на другом. Вы никогда не должны запускать apt-get update без какой-либо другой команды, потому что кеш никогда не будет признан недействительным. Вместо этого сделайте RUN apt-get update && apt-get -y install curl. Вы также можете запустить docker build --no-cache, чтобы убедиться, что вы не используете кеш.

Вкратце: docker build --pull --no-cache должен исправить вашу проблему, но вы также должны адаптировать свой файл докеров, как описано выше.

+0

спасибо за ответ, оба пункта действительны. Я должен был прочитать https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/! – zayquan

Смежные вопросы