强烈建议不要将环回设备用于生产用途

Usage of loopback devices is strongly discouraged for production use

我想在我的 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 中。

出现警告消息是因为您的 Docker 存储配置正在使用 "loopback device" -- 一个虚拟块设备,例如 /dev/loop0,它实际上由文件系统上的文件支持。这只不过是为了快速启动 Docker 和 运行 作为概念证明而已。

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

如果您使用的是 LVM 并且您的卷组上有一些可用的 space,这相对容易。例如,要给 docker 100G 的 space,首先创建一个数据和元数据卷:

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

然后将 Docker 配置为使用此 space,方法是将 /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 上没有可用的 space,您可以将一些其他块设备(例如,备用磁盘或分区)公开给 Docker以类似的方式。

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

谢谢。这让我发疯。我以为 bash 正在输出此消息。我正要针对 bash 提交错误。不幸的是,所提供的 none 选项在笔记本电脑或磁盘被充分利用的情况下是可行的。这是我对这种情况的回答。

这是我在笔记本电脑 /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,另一种选择是使用覆盖。这是一个完整描述的 link:

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 存储可能会损坏,如果你在 运行ning 时出现磁盘已满错误...这可能可以通过配额或其他简单的解决方案来避免。

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

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

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

@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"