2015-07-24 4 views
35

Я хочу, чтобы проверить докер в моем CentOS 7.1 поле, я получил это предупреждение:Использование петлевых устройств настоятельно рекомендуется для использования в производстве

[[email protected] ~]# docker run busybox /bin/echo Hello Docker 
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning. 
Hello Docker 

Я хочу знать причину и как подавить это предупреждение.

Экземпляр CentOS работает в виртуальном боксе, созданном бродягой.

ответ

49

Предупреждающее сообщение возникает из-за того, что в вашей конфигурации хранилища Docker используется «loopback device» - виртуальное блочное устройство, такое как /dev/loop0, которое активируется под файлом вашей файловой системы. Это никогда не означало ничего, кроме быстрого взлома, чтобы быстро и быстро запустить Docker в качестве доказательства концепции.

Вы не хотите подавить предупреждение; вы хотите исправить конфигурацию своего хранилища, чтобы предупреждение больше не выдавалось. Самый простой способ сделать это - назначить какое-то местное дисковое пространство для использования драйвером Docker's devicemapper и использовать его.

Если вы используете LVM и имеете свободное пространство в своей группе томов, это относительно просто. Например, чтобы дать Docker 100G пространства, создать архив данных и метаданных тома:

# lvcreate -n docker-data -L 100G /dev/my-vg 
# lvcreate -n docker-metadata -L1G /dev/my-vg 

А затем настроить Docker использовать это пространство редактирования /etc/sysconfig/docker-storage выглядеть следующим образом:

DOCKER_STORAGE_OPTIONS=-s devicemapper --storage-opt dm.datadev=/dev/my-vg/docker-data --storage-opt dm.metadatadev=/dev/my-vg/docker-metadata 

Если вы» если вы не используете LVM или у вас нет свободного места на вашем VG, вы можете открыть аналогичное устройство другим блочным устройством (например, запасным диском или разделом) для Docker.

Есть несколько интересных замечаний по этой теме here.

+0

Спасибо. Я думаю, мне нужно больше узнать о хранилище докеров и пройти тест. – rocksun

+1

Вы также можете найти [этот обзор доступных вариантов хранения] (http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/) интересное чтение. – larsks

+1

Ну, в случае, если у вас достаточно памяти (более 100 ГБ в лезвиях) и обрабатывает хосты докеров как эфемерные единицы, которые выполняют определенную работу, которая умирает, когда работа завершается (как правило, в системах CI), тогда я думаю, что loopback является жизнеспособный вариант. Использование ОЗУ как лишнего быстрого диска очень убедительно. – allprog

3

Спасибо. Это сводило меня с ума. Я думал, что bash выводит это сообщение. Я собирался подать ошибку против bash. К сожалению, ни один из представленных вариантов не является жизнеспособным на ноутбуке или таком, где диск полностью используется. Вот мой ответ на этот сценарий.

Вот что я использовал в/и т.д./sysconfig/Докер-памяти на моем ноутбуке:

DOCKER_STORAGE_OPTIONS="--storage-opt dm.no_warn_on_loop_devices=true" 

Примечание: я должен был перезапустить службу Docker для этого, чтобы иметь эффект. На Fedora команда для этого является:

systemctl stop docker 
systemctl start docker 

Существует также только команда перезапуска (systemctl restart docker), но это хорошая идея, чтобы проверить, чтобы убедиться, что остановка действительно работает, прежде чем начать снова.

Если вы не против отключения SELinux в своих контейнерах, другим вариантом является использование наложения.Вот ссылка, которая описывает, что в полной мере:

http://www.projectatomic.io/blog/2015/06/notes-on-fedora-centos-and-docker-storage-drivers/

В резюме для/и т.д./sysconfig/докер:

OPTIONS='--selinux-enabled=false --log-driver=journald' 

и/и т.д./sysconfig/DOCKER-хранения:

DOCKER_STORAGE_OPTIONS=-s overlay 

Когда вы меняете тип хранилища, перезапуск докера уничтожит ваше полное хранилище изображений и контейнеров. Вы можете также все вверх в папке// вар Lib/Докер, делая это:

systemctl stop docker 
rm -rf /var/lib/docker 
dnf reinstall docker 
systemctl start docker 

В RHEL 6.6 любой пользователь, имеющий доступ Docker может получить доступ к своим приватные ключи, и запускать приложения как корень с самым тривиальным хаки через тома. SELinux - это единственное, что предотвращает это в Fedora и RHEL 7. Тем не менее, неясно, какая часть дополнительной безопасности RHEL 7 поступает от SELinux за пределы контейнера и сколько внутри контейнера ...

Как правило, loopback-устройства подходят для случаев, когда предел в 100 ГБ максимум и небольшая производительность не являются проблемой. Единственная проблема, которую я могу найти, - это хранилище докеров, которое может быть повреждено, если во время работы у вас есть полная ошибка на диске. Вероятно, этого можно избежать с помощью квот или других простых решений.

Однако для производственного экземпляра определенно стоит времени и усилий, чтобы правильно настроить это.

100G может быть чрезмерным для вашего экземпляра производства. Контейнеры и изображения довольно малы. Многие организации используют контейнеры докеров в VM как дополнительный показатель безопасности и изоляции. Если это так, у вас может быть довольно небольшое количество контейнеров, работающих на VM. В этом случае даже 10G может быть достаточным.

В заключение. Даже если вы используете прямой lvm, вам может понадобиться дополнительная файловая система для/var/lib/docker. Причина заключается в том, что команда «загрузка докеров» создаст несжатую версию изображений, загружаемых в эту папку, прежде чем добавлять их в хранилище данных. Поэтому, если вы пытаетесь сохранить его маленьким и легким, изучите параметры, отличные от прямого lvm.

+0

У меня даже нет **/etc/sysconfig/docker-storage ** на моей машине. Как ты получил это? –

+0

да ... и не ... –

0

@Igor Ганапольский февраля и @ Minca Daniel Andrei

Проверьте это:

systemctl edit docker --full

Если директива EnvironmentFile не указан в [Service] блоке, то не повезло (я не имею эту проблему на Centos7), но вы можете расширить стандартное устройство systemd следующим образом:

systemctl edit docker EnvironmentFile=-/etc/sysconfig/docker ExecStart= ExecStart=/usr/bin/dockerd $OPTIONS

И создать файл /etc/sysconfig/docker с содержанием:

OPTIONS="-s overlay --storage-opt dm.no_warn_on_loop_devices=true"

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