目前从 Docker 在 GitHub 上的 Issue #6980 cap_set_file not permitted on aufs storage driver only 来看,似乎只有 Ubuntu 14.04 LTS 上会重现这个问题。
解决方法是:
更换 Docker 的 Storage driver,里面 @Thorndike 提到更换成 devicemapper
驱动即可,但是很不幸的在我的机器上跑不了,错误信息如下:
1 | Udev sync is not supported. This will lead to unexpected behavior, data loss and errors. For more information, see https://docs.docker.com/reference/commandline/cli/#daemon-storage-driver-option |
然而 https://docs.docker.com/reference/commandline/cli/#daemon-storage-driver-option 并没有给出任何有用的信息,还是在 GitHub 上找到了答案:
把 /var/lib/docker/trust/official.json
删掉,然后重启 docker 即可。
嗯,然而对 docker 1.7.0 并不起作用,只能降级到 1.6.2。
可惜我对 devicemapper
曾经在 docker 0.x 时代搞到 kernel panic 这件事儿仍然心有余悸,所以换成了 overlay
驱动。
由于 Trusty 的内核并不支持 overlay
,需要首先升级到 Vivid 的内核:
1 | sudo add-apt-repository ppa:canonical-kernel-team/ppa |
然后重启使内核生效
1 | sudo reboot |
修改 Docker 的 storage driver
,在 /etc/default/docker
里加一行:
1 | DOCKER_OPTS="$DOCKER_OPTS --storage-driver=overlay" |
然后重启 docker
1 | sudo service docker restart |
重启后执行 docker info
即可看到:
1 | Containers: 1 |
嗯,已经生效啦。再 build 就不会遇到 cap_set_file not permitted
了。
–EOF–