2016-11-01 3 views
5

Для проекта мне нужно установить изображение linux внутри контейнера докера, работающего ubuntu. Изображение, которое я хочу установить, - это Raspbian. Мне нужно получить доступ к файловой системе Linux и добавить файл.Изображение монтирования linux в контейнере докера

I доступ к изображению путем установки папки с флагом тома:

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. Может ли кто-нибудь объяснить, могу ли я смонтировать образ Linux в рабочем контейнере докеров, и если да, то как?

Редактировать

Проделав то же монтировать операции в бродяга работает отлично. Существуют ли какие-то ограничения для файловых систем крепления докеров?

+0

Raspbian предназначен для работы под голой аппаратных металла ARM , а не внутри виртуальной машины. Кроме того, для этого требуется ARM, и вы, вероятно, настроили docker/ubuntu на какой-то другой платформе? – Alkaline

+0

Я знаю. Но я хочу смонтировать файловую систему изображения. Я не хочу загружать raspbian. – k4l4m

ответ

7

Существуют ли некоторые ограничения для файловых систем крепления докеров?

Да. Стандартный контейнер Docker имеет ряд ограничений безопасности. Как вы обнаружили, вы не можете монтировать новые файловые системы. Вы также не можете изменить сетевую среду контейнера.

Одним из решений является просто выполнить операцию монтирования на хосте, а затем выставить установленный каталог в контейнер с помощью аргумента -v до docker run. Что-то вроде:

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

Но если вы действительно хотите, чтобы выполнить крепление внутри контейнера, вы можете запустить привилегированный контейнер, используя опцию --privileged для docker run. Это устраняет большинство ограничений, как правило, расположенные на контейнер Докера:

  • Вы будете иметь полный доступ к его хозяину /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

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