Использование петлевых устройств настоятельно не рекомендуется для производственного использования.
Я хочу проверить докер в моем CentOS 7.1, я получил это предупреждение:
[root@docker1 ~]# 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 работает в виртуальной коробке, созданной vagrant.
3 ответа
Предупреждающее сообщение появляется, потому что ваша конфигурация хранилища Docker использует "устройство обратной связи" - виртуальное блочное устройство, такое как /dev/loop0
это на самом деле поддерживается файлом в вашей файловой системе. Это никогда не означало ничего, кроме быстрого взлома, чтобы быстро запустить и запустить Docker в качестве доказательства концепции.
Вы не хотите подавлять предупреждение; Вы хотите исправить конфигурацию хранилища таким образом, чтобы предупреждение больше не выдавалось. Самый простой способ сделать это - выделить некоторое локальное дисковое пространство для использования драйвером хранилища устройств Domaer и использовать его.
Если вы используете LVM и в вашей группе томов есть свободное место, это относительно просто. Например, чтобы предоставить докеру 100 ГБ пространства, сначала создайте том данных и метаданных:
# 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 на другое блочное устройство (например, запасной диск или раздел).
Здесь есть несколько интересных заметок на эту тему.
Благодарю. Это сводило меня с ума. Я думал, что 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
Когда вы меняете тип хранилища, перезапуск докера уничтожит ваш полный образ и хранилище контейнеров. Вы можете также сделать все в папке / var / lib / docker:
systemctl stop docker
rm -rf /var/lib/docker
dnf reinstall docker
systemctl start docker
В RHEL 6.6 любой пользователь, имеющий доступ к докеру, может получить доступ к моим закрытым ключам и запускать приложения с правами суперпользователя, используя самые простые способы взлома через тома. SELinux - это то, что предотвращает это в Fedora и RHEL 7. Тем не менее, неясно, какая часть дополнительной безопасности RHEL 7 обеспечивается SELinux вне контейнера и сколько внутри контейнера...
Как правило, петлевые устройства подходят для случаев, когда ограничение в 100 ГБ и немного сниженная производительность не являются проблемой. Единственная проблема, которую я могу найти - хранилище докеров может быть повреждено, если у вас возникла ошибка переполнения диска во время работы... Этого, вероятно, можно избежать с помощью квот или других простых решений.
Однако для производственного экземпляра определенно стоит времени и усилий, чтобы правильно настроить его.
100G может быть чрезмерным для вашего производственного экземпляра. Контейнеры и изображения довольно маленькие. Многие организации используют док-контейнеры внутри виртуальных машин в качестве дополнительной меры безопасности и изоляции. Если это так, у вас может быть довольно небольшое количество контейнеров, работающих на одну виртуальную машину. В этом случае даже 10G может быть достаточно.
Последнее замечание Даже если вы используете прямой lvm, вам, вероятно, понадобится дополнительная файловая система для / var / lib / docker. Причина в том, что команда "docker load" создаст несжатую версию изображений, загружаемых в эту папку, перед добавлением ее в хранилище данных. Поэтому, если вы пытаетесь сделать его небольшим и легким, изучите другие варианты, кроме прямой lvm.
@ Игорь Ганапольский февраль и @Mincă Даниил Андрей
Проверь это:
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"