2015-05-13 19 views
7

Ho scaricato e installare il statica legata docker 1.6.1 da questo site, ed eseguirlo su RHEL 7.1:In che modo è possibile abilitare la sincronizzazione di udev correttamente nella finestra mobile?

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

posso vedere c'è un avvertimento: "Udev sync is not supported. This will lead to unexpected behavior, data loss and errors", e dopo aver controllato il codice docker fonte, io trovare il registro di avviso è da 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()) 

    ...... 
} 

il devicemapper.UdevSetSyncSupport è come questo:

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

Vedo che il motivo abilita la sincronizzazione udev non riuscita. In che modo è possibile abilitare la sincronizzazione udev correttamente?

Aggiornamento: Dopo aver controllato il codice smontaggio dei 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. 

Si tratta di una funzione vuota e non fa nulla, non menzionano impostare il supporto di sincronizzazione. Questo significa che questo file binario di tipo statico non è utilizzabile?

risposta

0

Non riesco a riprodurre il problema; Ottengo il seguente:

(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 

Fatevi un favore: Ignora le generazioni che docker.io fa, e ottenere Docker direttamente da RHEL. È disponibile nel canale Extra. Mentre di solito ci sono alcune settimane dopo le versioni upstream (ad esempio 1.6 anziché 1.7) è anche ben collaudato e garantito per funzionare effettivamente.

0

Rivedere la mia risposta originale dopo un feedback utile:

è necessario utilizzare un binario dinamica: "La questione, naturalmente, è che con un binario linkato staticamente, udev sincronizzazione è impossibile, e come tale può causare la corruzione problemi. questo è stato difficile per RedHat (che mantiene il driver devicemapper) per individuare perché usano un binario collegata in modo dinamico (che forniscono nei loro pronti contro termine).

Subito dopo la finestra mobile 1.7.0 rilascio ha iniziato a fornire rpm e deb con i binari collegati dinamicamente dallo script di installazione principale @ get.docker.com (e i repository apt corrispondenti) Con questi binari la sincronizzazione di udev è supportata e devicemapper dovrebbe funzionare correttamente. "

Docker ha fortunatamente cambiato i suoi repository per fornire binari dinamici da quando l'OP è stato creato.

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

Problemi correlati