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