Tôi đã tải và cài đặt tĩnh liên kết docker 1.6.1
từ site này, và chạy nó trên RHEL 7.1
:Làm cách nào để bật đồng bộ hóa udev trong docker?
[[email protected] 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
tôi có thể nhìn thấy ở đó là một lời cảnh báo: "Udev sync is not supported. This will lead to unexpected behavior, data loss and errors
", và sau khi kiểm tra mã docker
nguồn, tôi tìm các bản ghi cảnh báo là từ 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())
......
}
các devicemapper.UdevSetSyncSupport
là như thế này:
// 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()
}
Tôi có thể thấy lý do cho phép không thể đồng bộ hóa udev
. Làm cách nào để bật đồng bộ hóa udev
thành công?
Cập nhật: Sau khi kiểm tra mã tháo của 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.
Nó là một hàm rỗng và không có gì, không đề cập đến thiết lập hỗ trợ đồng bộ hóa. Điều này có nghĩa là nhị phân docker được xây dựng tĩnh này không sử dụng?