赞
踩
我的系统是ubuntu20.04的华为服务器,docker默认选择的存储驱动貌似不是overlay2,而是aufs,我在run容器的时候出现了以下错误:
docker: Error response from daemon: error creating aufs mount to /var/lib/docker/aufs/mnt/0e350f19e17605be44d455015aeebcdf869bb3969560c50b4d61d4b02c34bc26-init: mount target=/var/lib/docker/aufs/mnt/0e350f19e17605be44d455015aeebcdf869bb3969560c50b4d61d4b02c34bc26-init data=br:/var/lib/docker/aufs/diff/0e350f19e17605be44d455015aeebcdf869bb3969560c50b4d61d4b02c34bc26-init=rw:/var/lib/docker/aufs/diff/43ec20a6aea0f09f86d9409364dc5a6c93d40589c436ec6003ae5a025f3143d8=ro+wh:/var/lib/docker/aufs/diff/095f8ace904af105cd9a84c4c88bd2572f2714fd8159f023ac1c9a68b6eba0f9=ro+wh:/var/lib/docker/aufs/diff/3af650c3a739941536d71c204b5b046783438f933703c6b68365e8a8d8fe813a=ro+wh,dio,xino=/dev/shm/aufs.xino: invalid argument.
See 'docker run --help'.
这个问题貌似是文件系统aufs的问题,当前安装的docker使用的存储驱动aufs与文件系统不兼容。
AUFS是一个联合文件系统。aufs存储驱动程序以前是默认的存储驱动程序,用于管理Ubuntu Docker上的镜像和层,以及Stretch之前的Debian版本。如果您的Linux内核是4.0或更高版本,并且您使用Docker Engine-Community,请考虑使用较新的overlay2,它比aufs存储驱动程序具有潜在的性能优势。
注意: 某些发行版和Docker版本不支持AUFS。有关支持的平台的详细信息,请参阅先决条件。
Docker是一个容器化技术,它可以将应用程序及其依赖项打包到一个容器中,以便在不同的环境中运行。而aufs是Docker使用的一种文件系统,它可以让Docker容器更加轻量级和高效。
但是,使用aufs文件系统有一些先决条件:
对于Docker Engine - Community,AUFS只支持Ubuntu和Debian Stretch之前的版本。如果你使用其他操作系统,就不能使用aufs文件系统。
对于Docker EE,AUFS只支持Ubuntu。如果你使用其他操作系统,也不能使用aufs文件系统。
如果你使用Ubuntu,并且想要使用aufs文件系统,你需要将AUFS模块添加到内核中。如果你不安装这些软件包,就需要使用overlay2文件系统。
最后,aufs文件系统不能使用以下支持文件系统:aufs、btrfs或ecryptfs。这意味着包含/var/lib/docker/aufs的文件系统不能是这些文件系统类型之一。
注意: aufs文件系统不能使用aufs、btrfs或ecryptfs这三种文件系统作为其底层文件系统。
aufs、btrfs和ecryptfs是三种不同的文件系统,它们之间是并列关系,都可以作为Linux系统中的文件系统使用。但是,aufs文件系统本身是一个叠加式的文件系统,它需要在另一个文件系统的基础上进行叠加,因此它不能使用aufs、btrfs或ecryptfs这三种文件系统作为其底层文件系统。
参考文章:https://docs.docker.com/storage/storagedriver/aufs-driver/
可以通过以下命令查看当前Docker使用的存储驱动程序:
docker info | grep -i 'storage driver'
执行该命令后,会输出当前Docker使用的存储驱动程序,例如:
Storage Driver: overlay2
在上面的例子中,可以看到当前Docker使用的存储驱动程序是overlay2,因此当前文件系统使用的是overlay2文件系统。
如果输出结果是overlay或者aufs,那么当前文件系统使用的就是overlay1或aufs文件系统。需要注意的是,overlay1文件系统已经被弃用,不再被推荐使用。如果你的系统上使用的是overlay1文件系统,建议升级到overlay2文件系统。
比如我的ubuntu虚拟机和山城矿服务器的文件系统都是overlay2:
北京华为服务器咋是aufs?
AUFS(Advanced Multi-Layered Unification Filesystem)是一种联合文件系统,它可以将多个文件系统合并成一个虚拟文件系统。AUFS最初是由Junjiro Okajima开发的,后来被并入了Linux内核。
AUFS的主要特点是支持多层文件系统的叠加,每一层文件系统都可以被视为一个镜像。在AUFS中,最底层的文件系统是只读的,而上层的文件系统是可写的。当需要修改文件时,AUFS会将修改的内容写入上层文件系统,而不会影响到底层文件系统。这种机制使得AUFS非常适合用于容器化应用程序的存储和管理。
在Docker早期版本中,AUFS是Docker的默认存储驱动程序。但是,由于AUFS的维护和支持成本较高,而且在某些情况下会出现性能问题,因此在Docker 1.13版本之后,Docker将默认存储驱动程序切换为overlay2文件系统。不过,如果你的系统上已经安装了AUFS文件系统,仍然可以使用它来作为Docker的存储驱动程序。
根据Docker官方文档的说明,从Docker 20.10版本开始,AUFS文件系统已经被标记为“不推荐使用”,并且在未来的版本中将被完全删除。如果你的系统上使用的是AUFS文件系统,建议升级到其他支持的文件系统,例如overlay2或者btrfs。如果你必须使用AUFS文件系统,可以考虑使用旧版本的Docker,例如Docker 19.03版本。
Docker upgrade failure: The aufs storage-driver is no longer supported
Install Docker Engine on Ubuntu
https://docs.docker.com/storage/storagedriver/overlayfs-driver/
Docker的默认文件系统是由Docker存储驱动来决定的,而不是由操作系统来决定的。在Ubuntu 20.04中,Docker的默认存储驱动是overlay2,但是如果你在安装Docker时选择了使用aufs存储驱动,那么Docker就会使用aufs文件系统。
因此,如果你在a主机和b主机上都使用了相同的Docker版本,并且都是使用默认的安装方式,那么它们应该都使用overlay2文件系统作为默认文件系统。如果你发现b主机上的Docker默认使用aufs文件系统,那么可能是在安装Docker时选择了aufs存储驱动,或者在安装Docker之前已经安装了aufs工具包,从而导致Docker使用aufs文件系统作为默认文件系统。
需要注意的是,aufs文件系统在Linux内核中的支持程度较低,而且在一些Linux发行版中已经被废弃,因此建议使用overlay2文件系统作为Docker的默认文件系统。如果你想要使用aufs文件系统,需要先确保你的系统中已经安装了aufs工具包,并且在安装Docker时选择aufs存储驱动。
首先我的docker info,与我其他主机的docker info对比,请看:KYSL北京华为服务器测试一键部署(docker问题)
root@ubuntu:/home/ubuntu# root@ubuntu:/home/ubuntu# docker info Client: Context: default Debug Mode: false Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 4 Server Version: 20.10.21 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: overlayfs Dirs: 34 Dirperm1 Supported: false Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 1 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc Default Runtime: runc Init Binary: docker-init containerd version: runc version: init version: Security Options: apparmor seccomp Profile: default Kernel Version: 5.15.0-67-generic Operating System: Ubuntu 20.04.6 LTS OSType: linux Architecture: x86_64 CPUs: 40 Total Memory: 30.86GiB Name: ubuntu ID: VSP2:445S:5HMB:F6WX:UWWP:4ILL:NVJS:YB4R:G6PH:QTQT:GGXO:ZKXZ Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false WARNING: the aufs storage-driver is deprecated, and will be removed in a future release. root@ubuntu:/home/ubuntu#
而我的报错:
可能是由于aufs存储驱动无法正常使用导致,至于为啥无法正常使用,就不得而知了。
我们参考文章:Error: “error creating aufs mount to” when building dockerfile的解决办法
手动创建:/etc/docker/daemon.json
(或者在apt install docker.io前先创建好这个文件,安装完后就直接能用)
内容为:
{
"storage-driver": "vfs"
}
表示我们将docker使用的存储驱动使用vfs(原先默认是aufs)
然后停止Docker服务,删除aufs存储目录,并重新启动Docker服务(注意:如果你已经有docker容器,就先把你容器数据备份好,不然执行下面rm很可能删掉了!):
sudo service docker stop
sudo rm -rf /var/lib/docker/aufs
sudo service docker start
然后docker就正常了:
可以看到存储驱动变成了vfs:
镜像也能正常run:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。