2017-02-18 50 views
1

我想編輯泊塢窗圖像元數據,原因如下:如何編輯現有的碼頭圖像元數據?

  • 我不喜歡的圖像父母揭露,音量等聲明(見#3465,多克爾-隊並不想提供一個解決方案),所以我想「放大」或「不曝光」圖像。

  • 我dont't等的圖像ContainerConfig(見docker inspect [image])因爲它是從使用docker commit [container]

  • 修復錯誤運行的容器durring docker builddocker run等產生:
    cannot mount volume over existing file, file exists [path]

有什麼辦法可以做到嗎?

+0

你需要什麼「暴露」端口? – Matt

+1

@Matt我正在打包一個複雜的應用程序,不幸的是沒有自動化安裝是可能的。在安裝時我需要將幾件東西裝入容器中。完成後,我將容器提交給將用於部署應用程序的映像。不幸的是,提交將所有卷存儲在圖像元數據中,安裝後不需要這些卷。用元數據中的無效(舊)卷啓動映像會導致'無法在現有文件上掛載卷,文件存在'錯誤。這是我的工作路線,使事情工作。 – GameScripting

+0

卷在自動發生時可能會導致問題,並且還會在後臺創建大量的「混亂」。暴露的端口在很大程度上是良性的,因爲你需要告訴碼頭公開端口。 – Matt

回答

2

它有點哈克,但工程:

  1. 保存圖像的tar.gz文件:
    $ docker save [image] > [targetfile.tar.gz]

  2. 提取tar文件,以獲得進入原始圖像數據:
    tar -xvzf [targetfile.tar.gz]

  3. 查找manifest.json文件中的圖像元數據文件:應該有像.Config這樣的密鑰,其中包含[HEX]號碼。在提取的文件夾的根目錄中應該有精確的[HEX].json
    這是包含圖像元數據的文件。按你喜歡的方式編輯。

  4. 包解壓後的文件放回一個new.tar.gz -archive

  5. 使用cat [new.tar.tz] | docker load重新導入修改後的圖像

  6. 使用docker inspect [image]驗證您的元數據更改已應用於

+0

良好的解決方法。應該注意的是,這會「摺疊」圖像圖層,因此您會丟失圖像中存在的任何圖層共享。 – Matt