2015-05-13 4 views
7

Ich habe heruntergeladen und installiert werden die statische gebundenen docker 1.6.1 von diesem site, und führen Sie es auf RHEL 7.1:Wie kann die Aktivierung von udev erfolgreich im Andockfenster aktiviert werden?

[[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 

ich sehen kann, eine Warnung gibt es: „Udev sync is not supported. This will lead to unexpected behavior, data loss and errors“, und nach dem docker Quellcode überprüft, I findet das Warnprotokoll ist von 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()) 

    ...... 
} 

die devicemapper.UdevSetSyncSupport ist wie folgt:

// 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() 
} 

Ich kann sehen, der Grund ist udev Synchronisierung fehlgeschlagen. Wie kann udev erfolgreich synchronisiert werden?

Update: Nach der Demontage Code dm_udev_set_sync_support Überprüfung:

(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. 

Es ist eine leere Funktion und tut nichts, erwähnen nicht Sync-Unterstützung eingestellt. Bedeutet das, dass diese statische Docker-Binärdatei nutzlos ist?

Antwort

0

Ich kann Ihr Problem nicht reproduzieren; Ich erhalte die folgende:

(gdb) disassemble dm_udev_set_sync_support 
Dump of assembler code for function [email protected]: 
    0x0000000000403420 <+0>:  jmpq *0xda8c92(%rip)  # 0x11ac0b8 <[email protected]> 
    0x0000000000403426 <+6>:  pushq $0x14 
    0x000000000040342b <+11>: jmpq 0x4032d0 

Tun Sie sich selbst einen Gefallen: Ignorieren Sie die Builds, dass docker.io tut, und erhalten Docker direkt von RHEL. Es ist im Extras-Kanal verfügbar. Während es normalerweise ein paar Wochen hinter Upstream-Releases liegt (z.B. 1,6 statt 1,7), ist es auch gut getestet und garantiert, dass es tatsächlich funktioniert.

0

Revisionieren meine ursprüngliche Antwort nach einigem nützlichen Feedback:

Sie haben eine dynamische binäre verwenden: „Die Frage natürlich mit einer statisch gelinkte binär sein, dass udev sync unmöglich ist, und als solche können dazu führen, Korruption Dies war schwierig für RedHat (wer hält die Devicemapper Treiber) zu lokalisieren, weil sie eine dynamisch verknüpfte Binärdatei verwenden (die sie in ihren Repos bereitstellen)

Kurz nach der Version 1.7.0 Release Docker begann, RPMs und Debs bereitzustellen mit dynamisch verknüpften Binaries aus dem Hauptinstallations-Skript @ get.docker.com (und passenden Repos, die übereinstimmen). Mit diesen Binärdateien wird udev sync unterstützt und devicemapper sollte funktionieren. "

Docker hat seine Repositorys glücklicherweise geändert, um dynamische Binärdateien seit der Erstellung des OP bereitzustellen.

Referenznummer: https://github.com/docker/docker/issues/13179

Verwandte Themen