强烈建议不要使用环回设备进行生产

时间:2015-07-24 22:37:57

标签: docker vagrant virtualbox

我想在我的CentOS 7.1盒子里测试docker,我收到了这个警告:

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

3 个答案:

答案 0 :(得分:55)

出现警告消息是因为您的Docker存储配置正在使用"环回设备" - 虚拟块设备,例如/dev/loop0,实际上由文件系统上的文件支持。这绝不仅仅意味着让Docker快速启动并快速运行作为概念验证。

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

如果您正在使用LVM并且您的卷组上有一些可用空间,这相对容易。例如,要为docker 100G提供空间,首先要创建一个数据和元数据卷:

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

然后通过编辑/etc/sysconfig/docker-storage将Docker配置为使用此空间,如下所示:

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公开其他一些块设备(例如,备用磁盘或分区)。 / p>

关于这个主题有一些有趣的注释here

答案 1 :(得分:3)

感谢。这让我发疯了。我以为bash正在输出这条消息。我准备提交一个反对bash的bug。不幸的是,所提供的选项都不适用于笔记本电脑或充分利用磁盘的情况。以下是我对这种情况的回答。

以下是我在笔记本电脑上的/ 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

更改存储类型时,重新启动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中阻止这种情况的一件事。也就是说,目前尚不清楚有多少额外的RHEL 7安全性来自容器外的SELinux以及容器内部有多少......

通常情况下,环回设备适用于最大限制为100GB且性能略有降低的情况。我能找到的唯一问题是如果你在运行时出现磁盘满错误,则docker存储可能会损坏...这可以通过配额或其他简单的解决方案来避免。

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

对于您的生产实例,100G可能过多。容器和图像相当小。许多组织在VM中运行docker容器作为安全性和隔离的附加措施。如果是这样,您可能每个VM运行的容器数量相当少。在这种情况下,甚至10G也可能就足够了。

最后一点说明。即使您使用的是直接lvm​​,也可能需要/ var / lib / docker的附加文件系统。原因是命令" docker load"在将数据添加到数据存储之前,将创建此文件夹中正在加载的图像的未压缩版本。因此,如果你试图保持它小而轻,那么探索直接lvm​​以外的选项。

答案 2 :(得分:0)

@Igor Ganapolsky 2月和@MincăDanielAndrei

检查一下:

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"