我想在我的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中运行。
答案 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"