2016-11-01 97 views
5

對於一個項目,我需要在運行ubuntu的Docker容器中掛載一個linux映像。我想要裝載的圖像是Raspbian。我需要訪問映像的linux文件系統並添加一個文件。在Docker容器中掛載linux映像

我在文件夾的卷標誌安裝訪問圖像:

docker run -it -v /path/to/image/folder:/default ubuntu /bin/bash

隨着fdisk -l raspbian.img我發現偏移:

Disk raspbian.img: 1.3 GiB, 1389363200 bytes, 2713600 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes/512 bytes 
I/O size (minimum/optimal): 512 bytes/512 bytes 
Disklabel type: dos 
Disk identifier: 0x5a7089a1 

Device  Boot Start  End Sectors Size Id Type 
raspbian.img1  8192 137215 129024 63M c W95 FAT32 (LBA) 
raspbian.img2  137216 2713599 2576384 1.2G 83 Linux 

現在,當我嘗試mount -o loop,offset=$((137216*512)) raspbian.img /mnt/掛載映像我得到mount: /mnt/: mount failed: Unknown error -1。有人可以解釋我是否可以在正在運行的docker容器中掛載linux映像,如果可以的話如何?

編輯

做同樣安裝在顛沛流離的操作完美。碼頭安裝文件系統有一些限制嗎?

+0

Raspbian是指下裸機ARM硬件上運行,不在虛擬機內部。除此之外,它需要ARM,而且你可能在其他平臺下設置了docker/ubuntu? – Alkaline

+0

我知道。但我想掛載圖像的文件系統。我不想引導raspbian。 – k4l4m

回答

7

碼頭掛載文件系統有一些限制嗎?

是的。標準的Docker容器有一些安全限制。正如您發現的,您無法安裝新的文件系統。您也無法修改容器的網絡環境。

一種解決方案是簡單地在主機上執行安裝操作,然後使用參數docker run-v參數將裝入的目錄顯示到容器中。喜歡的東西:

# losetup -fP --show raspbian.img 
/dev/loop0 
# mount /dev/loop0p2 /mnt 
# docker run -v /mnt:/raspbian ubuntu bash 

但如果你真的要執行容器內的安裝,您可以到docker run運行特權的容器,使用--privileged選項。這消除了通常放置在Docker容器上的大部分限制:

  • 您將可以完全訪問主機的/dev
  • 您將可以掛載文件系統。
  • 您將能夠修改容器內的網絡配置。

例如:

# docker run -it --rm --privileged -v /images:/images ubuntu bash 

現在我可以檢查圖像:

[email protected]:/# fdisk -l /images/2016-09-23-raspbian-jessie-lite.img 
Disk /images/2016-09-23-raspbian-jessie-lite.img: 1.3 GiB, 1389363200 bytes, 2713600 sectors 
Units: sectors of 1 * 512 = 512 bytes 
Sector size (logical/physical): 512 bytes/512 bytes 
I/O size (minimum/optimal): 512 bytes/512 bytes 
Disklabel type: dos 
Disk identifier: 0x5a7089a1 

Device          Boot Start  End Sectors Size Id Type 
/images/2016-09-23-raspbian-jessie-lite.img1  8192 137215 129024 63M c W95 FAT 
/images/2016-09-23-raspbian-jessie-lite.img2  137216 2713599 2576384 1.2G 83 Linux 

並將其安裝:

[email protected]:/# mount -o loop,offset=$((137216*512)) /images/2016-09-23-raspbian-jessie-lite.img /mnt 
[email protected]:/# ls /mnt 
bin dev home lib64  media opt root sbin sys usr 
boot etc lib lost+found mnt proc run srv tmp var 
[email protected]:/# 
+0

太棒了!非常感謝你。忘記特權模式。 – k4l4m