问题描述
在Ubuntu 24.04系统上使用snap安装的 Docker,执行容器挂载单个配置文件时报错:
docker: Error response from daemon: failed to create task for container:
failed to create shim task: OCI runtime create failed: runc create failed:
unable to start container process: error during container init:
error mounting "/work/nginx/nginx.conf" to rootfs at "/etc/nginx/nginx.conf":
create mountpoint for /etc/nginx/nginx.conf mount: cannot create subdirectories
in "/var/snap/docker/common/var-lib-docker/overlay2/...": not a directory: unknown
复现场景
# 主机上存在配置文件
$ ls -l /work/nginx/nginx.conf
-rw-r--r-- 1 root root 1191 Feb 14 09:14 /work/nginx/nginx.conf
# 尝试挂载单个文件到容器
$ docker run -d --name nginx \
-v /work/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
nginx
根本原因
Snap安装的Docker由于沙箱限制,不支持挂载单个文件,只能挂载目录。错误信息中的路径 /var/snap/docker/common/var-lib-docker/overlay2/... 就是明显特征。
解决方案
1. 卸载snap版Docker
sudo snap remove docker
2. 清空Bash命令缓存
hash -r
3. 安装apt版Docker
sudo apt update
sudo apt install docker.io
4. 验证安装
docker --version
which docker # 应该显示 /usr/bin/docker 而非 /snap/bin/docker
5. 重新运行容器
docker run -d --name nginx \
-v /work/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /work/nginx/conf.d:/etc/nginx/conf.d \
-v /work/nginx/logs:/var/log/nginx \
-p 80:80 \
nginx
参考命令对比
| 安装方式 | Docker 路径 | 数据目录 | 单文件挂载 |
|---|---|---|---|
| snap | /snap/bin/docker | /var/snap/docker/common/var-lib-docker | ❌ 不支持 |
| apt | /usr/bin/docker | /var/lib/docker | ✅ 支持 |