2017-02-18 36 views
1

Я хотел бы изменить метаданные Докер изображения по следующим причинам:Как редактировать существующие метаданные изображения докеров?

  • Мне не нравится изображение родители ПОДВЕРГАТЬ, ОБЪЕМ и т.д. декларация (см #3465, Docker-Team не хочет, чтобы обеспечить решение), поэтому я хотел бы «un-volume» или «un-expose» изображение.

  • Я dont't как изображение ContainerConfig (см docker inspect [image]) причиной он был создан из работающей контейнера с использованием docker commit [container]

  • исправить ошибку durring docker build или docker run как:
    cannot mount volume over existing file, file exists [path]

Есть ли способ сделать это?

+0

Для чего вам нужно «разоблачать» порты? – Matt

+1

@Matt Я упаковывал сложное приложение, где, к сожалению, автоматическая установка невозможна. Мне нужно установить несколько вещей в контейнер при выполнении установки. По завершении я передаю контейнер изображению, которое будет использоваться для развертывания приложения. К сожалению commit хранит все тома в метаданных изображения, которые не требуются после установки. Запуск изображения с недопустимыми (старыми) томами в метаданных, приводившими к тому, что 'can not mount volume over existing file, file exists'. Это была моя работа, чтобы заставить все работать. – GameScripting

+0

Объемы могут вызывать проблемы, поскольку они происходят автоматически, а также могут создавать большой объем «беспорядка» в фоновом режиме. Открытые порты в значительной степени доброкачественны, так как вам нужно сказать, что докер открывает порты. – Matt

ответ

2

Его немного Hacky, но работает:

  1. сохранить изображение в файл tar.gz:
    $ docker save [image] > [targetfile.tar.gz]

  2. экстракте архивный файл, чтобы получить доступ к данным необработанного изображения:
    tar -xvzf [targetfile.tar.gz]

  3. Lookup файл метаданных изображения в файле manifest.json: Там должно быть такой как .Config, который содержит номер [HEX]. Должен быть точный [HEX].json в корне извлеченной папки.
    Это файл, содержащий метаданные изображения. Редактируйте, как вам нравится.

  4. Упаковать распакованные файлы обратно в new.tar.gz -archive

  5. Использование cat [new.tar.tz] | docker load реимпортировать модифицированное изображение

  6. Использование docker inspect [image] для проверки изменений метаданных были применены

+0

Хорошая работа вокруг. Следует, наверное, отметить, что это «разрушает» слои изображения, поэтому вы теряете общий доступ к слою, существующий на изображении. – Matt