强烈build议在生产中使用环回设备

我想在我的CentOS 7.1中testingdocker,我得到这个警告:

[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创build的virtualbox中运行。

会出现警告消息,因为您的Docker存储configuration使用“回送设备” – 虚拟块设备,例如/dev/loop0 ,由您的文件系统上的文件执行。 这不仅仅意味着让Docker快速启动并作为概念certificate。

你不想压制这个警告; 您要修复您的存储configuration,以便不再发出警告。 最简单的方法是分配一些本地磁盘空间供Docker的devicemapper存储驱动程序使用并使用它。

如果您正在使用LVM并在卷组上有一些可用空间,则这相对容易。 例如,要给Docker 100G的空间,首先要创build一个数据和元数据卷:

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

然后通过编辑/etc/sysconfig/docker-storage来configurationDocker来使用这个空间,如下所示:

 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" 

注意:我必须重新启动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/

总结/ etc / sysconfig / docker:

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

和/ etc / sysconfig / docker-storage:

 DOCKER_STORAGE_OPTIONS=-s overlay 

当您更改存储types时,重新启动Docker将销毁您的完整映像和容器存储。 你可能还需要在/ var / lib / docker文件夹中做所有的事情:

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

在RHEL 6.6中,任何具有docker访问权的用户都可以访问我的私钥,并以root用户身份运行应用程序,并通过卷进行最简单的黑客攻击。 SELinux是防止在Fedora和RHEL 7中出现的一件事情。也就是说,还不清楚在容器外有多less额外的RHEL 7安全来自SELinux,容器内有多less…

一般来说,环回设备适用于最大100GB的限制和性能略有下降的情况。 唯一的问题,我可以find的是,docker商店可能会损坏,如果你有一个磁盘满错误,而运行…这可能可以避免与配额,或其他简单的解决scheme。

但是,对于生产实例来说,正确设置它是绝对值得花时间和精力的。

100G可能会超出您的生产实例。 容器和图像相当小。 许多组织正在虚拟机中运行docker容器,作为安全性和隔离的附加措施。 如果是这样,那么每个虚拟机的容器数量可能会相当less。 在这种情况下,甚至10G就足够了。

最后一个音符。 即使你使用直接lvm​​,你也可能需要一个额外的/ var / lib / docker文件系统。 原因是命令“docker load”会在将该文件添加到数据存储之前,创build一个在该文件夹中加载的图像的未压缩版本。 所以如果你试图保持小而轻,那么探索直接lvm​​以外的选项。

@Igor Ganapolsky 2月和@Mincă丹尼尔·安德烈

检查这个:

systemctl edit docker --full

如果指令EnvironmentFile没有在[Service]块中列出,那么没有运气(我在Centos7上也有这个问题),但是你可以像这样扩展标准的systemd单元:

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

并创build一个文件/etc/sysconfig/docker的内容:

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