Подтвердить что ты не робот

Использование устройств обратной петли настоятельно не рекомендуется для использования в производстве

Я хочу протестировать докер в моем окне 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 работает в виртуальном боксе, созданном бродягой.

4b9b3361

Ответ 1

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

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

Если вы используете LVM и имеете некоторое свободное пространство в своей группе томов, это относительно легко. Например, чтобы предоставить докеру 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, вы можете открыть аналогичное устройство другому блочному устройству (например, запасному диску или разделу).

Есть несколько интересных заметок на эту тему здесь.

Ответ 2

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

Вот что я использовал в /etc/sysconfig/docker -storage на моем ноутбуке:

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

Примечание. Для этого мне пришлось перезапустить службу докеров. В 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/

В резюме для /etc/sysconfig/docker:

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

и для /etc/sysconfig/docker -storage:

DOCKER_STORAGE_OPTIONS=-s overlay

При изменении типа хранилища перезагрузка docker уничтожит ваше полное хранилище изображений и контейнеров. В этом случае вы можете все в папке /var/lib/docker:

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

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

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

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

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

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

Ответ 3

@Igor Ganapolsky Feb и @Mincă 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"