Intereting Posts
Могу ли я освободить некоторую память о запущенном контейнере Docker на лету? Докер для сетей Windows Ошибка Nodemon Docker ECONNREFUSED Как выбрать, какая сеть выполняет сопоставление портов Файл sql-сервера Postgres, похоже, не завершен изображения докеров хранятся в корневом пользователе, таким образом, потребляя мое дисковое пространство FeignClient с сертификатом клиента и докером Как выполнить команду запроса Docker на всех контейнерах? Невозможно использовать -lt при запуске журналов Nginx Docker или cat Как запустить yesod init из контейнера докеров? Уменьшение размера изображения докера без Dockerfile Получить конфигурацию приложения из безопасного места во время запуска задачи перезаписывать IP-адреса контейнера-докера? Как развернуть приложение Angular 4 с Docker и Azure Web App на Linux Как структурировать контейнер-докер-сервер nginx и сборку активов, которые он обслуживает

доступные версии пакетов внутри контейнера докеры Ubuntu меняются в зависимости от ОС хоста

У меня возникли проблемы с привязкой версии python и nodejs в контейнере докеров-контейнеров на ubuntu.

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

Я хочу указать в Dockerfile, какие версии пакетов python и 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 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 

Вот начало файла Docker, я изменил 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. Что мне нужно изменить, чтобы надежно установить версию python и nodejs таким образом, что сборка docker-контейнера будет работать в нескольких средах хоста, включая OSX и Linux AMI

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

Существуют две возможные причины, по которым версии не совпадают:

  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 должен исправить вашу проблему, но вы также должны адаптировать свой файл Docker, как описано выше.