9

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

警告があることがわかります: " "。ソース コードをUdev sync is not supported. This will lead to unexpected behavior, data loss and errors確認した後、警告ログがdeviceset.goからのものであることがわかりました。 docker

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

    ......
}

は次の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()
}

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.

これは空の関数であり、set sync のサポートは言うまでもなく、何もしません。これは、この静的にビルドされた docker バイナリが役に立たないということですか?

4

2 に答える 2

0

問題を再現できません。私は以下を取得します:

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

docker.io が行うビルドを無視して、RHEL から直接 Docker を入手してください。Extras チャンネルで入手できます。通常、アップストリーム リリース (1.7 ではなく 1.6 など) から数週間遅れますが、十分にテストされ、実際に動作することが保証されています。

于 2015-07-09T23:12:38.873 に答える