无法在Ubuntu 16.04中启动Docker服务

我一直在试图Ubuntu 16.04上使用Docker(1.10),但安装失败,因为Docker服务无法启动 。 我已经尝试通过docker.iodocker -engine apt软件包和curl -sSL https://get.docker.com/ | sh来安装curl -sSL https://get.docker.com/ | sh curl -sSL https://get.docker.com/ | sh但它不工作。

我的主机信息是:

Linux Xenial 4.5.3-040503-generic #201605041831 SMP Wed May 4 22:33:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

这里是systemctl status docker.service

 ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since sáb 2016-05-14 15:17:31 CEST; 12min ago Docs: https://docs.docker.com Process: 22479 ExecStart=/usr/bin/docker daemon -H fd:// (code=exited, status=1/FAILURE) Main PID: 22479 (code=exited, status=1/FAILURE) may 14 15:17:30 Xenial docker[22479]: time="2016-05-14T15:17:30.103601523+02:00" level=info msg="New containerd process, pid: 22485\n" may 14 15:17:31 Xenial docker[22479]: time="2016-05-14T15:17:31.149064723+02:00" level=error msg="devmapper: Unable to delete device: devicemapper: Can't set task name /dev/mapper/docker-8:6-2101297-pool" may 14 15:17:31 Xenial docker[22479]: time="2016-05-14T15:17:31.149127439+02:00" level=warning msg="devmapper: Usage of loopback devices is strongly discouraged for production use. Please use `--storage-opt dm.thinpooldev` or use `man docker` to refer to dm.thinpooldev section." may 14 15:17:31 Xenial docker[22479]: time="2016-05-14T15:17:31.153010028+02:00" level=error msg="[graphdriver] prior storage driver \"devicemapper\" failed: devicemapper: Can't set task name /dev/mapper/docker-8:6-2101297-pool" may 14 15:17:31 Xenial docker[22479]: time="2016-05-14T15:17:31.153130839+02:00" level=fatal msg="Error starting daemon: error initializing graphdriver: devicemapper: Can't set task name /dev/mapper/docker-8:6-2101297-pool" may 14 15:17:31 Xenial systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE may 14 15:17:31 Xenial docker[22479]: time="2016-05-14T15:17:31+02:00" level=info msg="stopping containerd after receiving terminated" may 14 15:17:31 Xenial systemd[1]: Failed to start Docker Application Container Engine. may 14 15:17:31 Xenial systemd[1]: docker.service: Unit entered failed state. may 14 15:17:31 Xenial systemd[1]: docker.service: Failed with result 'exit-code'. 

这里是sudo docker daemon -D

 DEBU[0000] docker group found. gid: 999 DEBU[0000] Listener created for HTTP on unix (/var/run/docker.sock) INFO[0000] previous instance of containerd still alive (23050) DEBU[0000] containerd connection state change: CONNECTING DEBU[0000] Using default logging driver json-file DEBU[0000] Golang's threads limit set to 55980 DEBU[0000] received past containerd event: &types.Event{Type:"live", Id:"", Status:0x0, Pid:"", Timestamp:0x57372cae} DEBU[0000] containerd connection state change: READY DEBU[0000] devicemapper: driver version is 4.34.0 DEBU[0000] devmapper: Generated prefix: docker-8:6-2101297 DEBU[0000] devmapper: Checking for existence of the pool docker-8:6-2101297-pool DEBU[0000] devmapper: poolDataMajMin=7:0 poolMetaMajMin=7:1 DEBU[0000] devmapper: Major:Minor for device: /dev/loop0 is:7:0 DEBU[0000] devmapper: Major:Minor for device: /dev/loop1 is:7:1 DEBU[0000] devmapper: loadDeviceFilesOnStart() DEBU[0000] devmapper: Skipping file /var/lib/docker/devicemapper/metadata/transaction-metadata DEBU[0000] devmapper: loadDeviceFilesOnStart() END DEBU[0000] devmapper: constructDeviceIDMap() DEBU[0000] devmapper: constructDeviceIDMap() END DEBU[0000] devmapper: Rolling back open transaction: TransactionID=1 hash= device_id=1 ERRO[0000] devmapper: Unable to delete device: devicemapper: Can't set task name /dev/mapper/docker-8:6-2101297-pool WARN[0000] devmapper: Usage of loopback devices is strongly discouraged for production use. Please use `--storage-opt dm.thinpooldev` or use `man docker` to refer to dm.thinpooldev section. DEBU[0000] devmapper: Initializing base device-mapper thin volume DEBU[0000] devicemapper: CreateDevice(poolName=/dev/mapper/docker-8:6-2101297-pool, deviceID=1) DEBU[0000] devmapper: Error creating device: devicemapper: Can't set task name /dev/mapper/docker-8:6-2101297-pool DEBU[0000] devmapper: Error device setupBaseImage: devicemapper: Can't set task name /dev/mapper/docker-8:6-2101297-pool ERRO[0000] [graphdriver] prior storage driver "devicemapper" failed: devicemapper: Can't set task name /dev/mapper/docker-8:6-2101297-pool DEBU[0000] Cleaning up old mountid : start. FATA[0000] Error starting daemon: error initializing graphdriver: devicemapper: Can't set task name /dev/mapper/docker-8:6-2101297-pool 

这里是./check-config.sh输出:

 warning: /proc/config.gz does not exist, searching other paths for kernel config ... info: reading kernel config from /boot/config-4.5.3-040503-generic ... Generally Necessary: - cgroup hierarchy: properly mounted [/sys/fs/cgroup] - apparmor: enabled and tools installed - CONFIG_NAMESPACES: enabled - CONFIG_NET_NS: enabled - CONFIG_PID_NS: enabled - CONFIG_IPC_NS: enabled - CONFIG_UTS_NS: enabled - CONFIG_DEVPTS_MULTIPLE_INSTANCES: enabled - CONFIG_CGROUPS: enabled - CONFIG_CGROUP_CPUACCT: enabled - CONFIG_CGROUP_DEVICE: enabled - CONFIG_CGROUP_FREEZER: enabled - CONFIG_CGROUP_SCHED: enabled - CONFIG_CPUSETS: enabled - CONFIG_MEMCG: enabled - CONFIG_KEYS: enabled - CONFIG_MACVLAN: enabled (as module) - CONFIG_VETH: enabled (as module) - CONFIG_BRIDGE: enabled (as module) - CONFIG_BRIDGE_NETFILTER: enabled (as module) - CONFIG_NF_NAT_IPV4: enabled (as module) - CONFIG_IP_NF_FILTER: enabled (as module) - CONFIG_IP_NF_TARGET_MASQUERADE: enabled (as module) - CONFIG_NETFILTER_XT_MATCH_ADDRTYPE: enabled (as module) - CONFIG_NETFILTER_XT_MATCH_CONNTRACK: enabled (as module) - CONFIG_NF_NAT: enabled (as module) - CONFIG_NF_NAT_NEEDED: enabled - CONFIG_POSIX_MQUEUE: enabled Optional Features: - CONFIG_USER_NS: enabled - CONFIG_SECCOMP: enabled - CONFIG_CGROUP_PIDS: enabled - CONFIG_MEMCG_KMEM: missing - CONFIG_MEMCG_SWAP: enabled - CONFIG_MEMCG_SWAP_ENABLED: missing (note that cgroup swap accounting is not enabled in your kernel config, you can enable it by setting boot option "swapaccount=1") - CONFIG_BLK_CGROUP: enabled - CONFIG_BLK_DEV_THROTTLING: enabled - CONFIG_IOSCHED_CFQ: enabled - CONFIG_CFQ_GROUP_IOSCHED: enabled - CONFIG_CGROUP_PERF: enabled - CONFIG_CGROUP_HUGETLB: enabled - CONFIG_NET_CLS_CGROUP: enabled (as module) - CONFIG_CGROUP_NET_PRIO: enabled - CONFIG_CFS_BANDWIDTH: enabled - CONFIG_FAIR_GROUP_SCHED: enabled - CONFIG_RT_GROUP_SCHED: missing - CONFIG_EXT3_FS: missing - CONFIG_EXT3_FS_XATTR: missing - CONFIG_EXT3_FS_POSIX_ACL: missing - CONFIG_EXT3_FS_SECURITY: missing (enable these ext3 configs if you are using ext3 as backing filesystem) - CONFIG_EXT4_FS: enabled - CONFIG_EXT4_FS_POSIX_ACL: enabled - CONFIG_EXT4_FS_SECURITY: enabled - Network Drivers: - "overlay": - CONFIG_VXLAN: enabled (as module) - Storage Drivers: - "aufs": - CONFIG_AUFS_FS: missing - "btrfs": - CONFIG_BTRFS_FS: enabled (as module) - "devicemapper": - CONFIG_BLK_DEV_DM: enabled - CONFIG_DM_THIN_PROVISIONING: enabled (as module) - "overlay": - CONFIG_OVERLAY_FS: enabled (as module) - "zfs": - /dev/zfs: missing - zfs command: missing - zpool command: missing 

如果有人能帮助我,我会非常感激

我有同样的问题,我试图用Salva Cort的建议修复它,但打印/etc/default/docker说:

#这个文件不适用于SYSTEMD

因此,这是一个适用于systemd (Ubuntu 15.04及更高版本)的永久性修复程序:

  1. 使用以下内容创建一个新文件/etc/systemd/system/docker.service.d/overlay.conf

     [Service] ExecStart= ExecStart=/usr/bin/docker daemon -H fd:// -s overlay 
  2. 刷新更改通过执行:

     sudo systemctl daemon-reload 
  3. 验证配置已经加载:

     systemctl show --property=ExecStart docker 
  4. 重启docker:

     sudo systemctl restart docker 

那么,最后我修好了

所有你需要做的是加载一个不同的存储驱动程序在我的情况下,我将使用overlay

  1. 禁用Docker服务sudo systemctl stop docker.service
  2. 启动Docker守护进程overlay驱动程序): sudo docker daemon -s overlay
  3. 运行Demo容器sudo docker run hello-world

为了使这些更改永久,您必须编辑/etc/default/docker文件并添加选项:

DOCKER_OPTS="-s overlay"

下次Docker服务被加载时,它将运行docker daemon -s overlay

通过docker-machine将docker从17.05-ce升级到17.06-ce之后,我遇到了同样的问题

  1. 更新/etc/systemd/system/docker.service.d/10-machine.conf

    更换

     `docker daemon` => `dockerd` 

    例如

     [Service] ExecStart= ExecStart=/usr/bin/docker deamon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver aufs --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic Environment= 

     [Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver aufs --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic Environment= 
  2. 刷新更改通过执行:

     sudo systemctl daemon-reload 
  3. 重启docker:

     sudo systemctl restart docker 

按照本博客中的指导,我已经能够在内核升级后正常工作。

https://mymemorysucks.wordpress.com/2016/03/31/docker-graphdriver-and-aufs-failed-driver-not-supported-error-after-ubuntu-upgrade/

 sudo apt-get update sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual sudo modprobe aufs sudo service docker restart 

看过其他一些答案后,看起来问题是该服务没有运行-s overlay选项。

我也碰巧注意到${DOCKER_OPTS}在调用结束时试图启动${DOCKER_OPTS}

我能够export DOCKER_OPTS="-s overlay" (bc默认DOCKER_OPTS是空的)并且运行docker。