欢迎光临
我们一直在努力

linux – 如何在docker中成功启用udev同步?

本站教程收集整理的这篇文章主要介绍了linux – 如何在docker中成功启用udev同步?,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

我已经从这个
site下载并安装了静态链接的docker 1.6.1,并在RHel 7.1上运行它:

[root@localhost bin]# ./docker -d
WARN[0000] Udev sync is not supported. This will lead to unexpected behavior,data loss and errors
INFO[0000] +job init_networkdriver()
INFO[0000] +job serveapi(unix:///var/run/docker.sock)
INFO[0000] Listening for http on unix (/var/run/docker.sock)
INFO[0000] -job init_networkdriver() = OK (0)
INFO[0000] Loading containers: start.

INFO[0000] Loading containers: done.
INFO[0000] docker daemon: 1.6.1 97cd073; execdriver: native-0.2; graphdriver: devicemapper
INFO[0000] +job acceptconnections()
INFO[0000] -job acceptconnections() = OK (0)
INFO[0000] Daemon has completed initialization@H_607_3@

我可以看到有一个警告:“不支持Udev同步.这将导致意外行为,数据丢失和错误”,并且在检查docker源代码后,我发现警告日志来自deviceset.go:

func (devices *DeviceSet) initDevmapper(doInit bool) error {
......

// https://github.com/docker/docker/issues/4036
if supported := devicemapper.UdevSetSyncSupport(true); !supported {
log.Warnf("Udev sync is not supported. This will lead to unexpected behavior,data loss and errors")
}
log.Debugf("devicemapper: udev sync support: %v",devicemapper.UdevSyncSupported())

......
}@H_607_3@

devicemapper.UdevSetSyncSupport是这样的:

// UdevSyncSupported returns whether device-mapper is able to sync with udev
//
// This is essential otherwise race conditions can arise where both udev and
// device-mapper attempt to create and destroy devices.
func UdevSyncSupported() bool {
return DmUdevGetSyncSupport() != 0
}

// UdevSetSyncSupport allows setTing whether the udev sync should be enabled.
// The return bool inDicates the state of whether the sync is enabled.
func UdevSetSyncSupport(enable bool) bool {
if enable {
DmUdevSetSyncSupport(1)
} else {
DmUdevSetSyncSupport(0)
}
return UdevSyncSupported()
}@H_607_3@

我可以看到原因是启用udev同步失败.如何成功启用udev同步?

更新:
检查dm_udev_set_sync_support的反汇编代码后:

(gdb) disassemble dm_udev_set_sync_support
Dump of assembler code for function dm_udev_set_sync_support:
=> 0x0000000000a3e4e0 <+0>: repz retq
End of assembler dump.@H_607_3@

它是一个空函数,什么都不做,没有提到set sync支持.这是否意味着这个静态构建的docker二进制文件是不可用的?

解决方法

我不能重现你的问题;我得到以下内容:

(gdb) disassemble dm_udev_set_sync_support
Dump of assembler code for function dm_udev_set_sync_support@plt:
0x0000000000403420 <+0>: jmpq *0xda8c92(%rip) 便宜香港vps # 0x11ac0b8 <dm_udev_set_sync_support@got.plt>
0x0000000000403426 <+6>: pushq $0x14
0x000000000040342b <+11>: jmpq 0x4032d0@H_607_3@

帮自己一个忙:忽略docker.io所做的构建,直接从RHel获取Docker.它可以在Extras频道中找到.虽然它通常比上游版本落后几周(例如1.6而不是1.7),但它也经过了充分测试并保证实际工作.

本站总结

以上是本站教程为你收集整理的linux – 如何在docker中成功启用udev同步?全部内容,希望文章能够帮你解决linux – 如何在docker中成功启用udev同步?所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。