nginx 起不来,挂载点左边先看是不是个目录

容器刚拉起来就没了,日志只留一句 failed (21: Is a directory),这种情况先去宿主机上核对挂载源到底是个什么东西。

这套记录针对 bind mount 的左侧路径,环境是 CentOS 7.9 加 Docker 20.10.7。

查之前先把它实际挂载的清单调出来看看:

$ docker inspect --format '{{json .Mounts}}' nginx-front
[{"Type":"bind","Source":"/etc/nginx/conf/nginx.conf","Destination":"/etc/nginx/nginx.conf","Mode":"ro"}]

啥时候会撞上:左右两边分不清是谁出问题的时候。 这点最容易翻车:Source 才是宿主机上的真实路径; 我最早碰到的其实是另一个报错 No such object,容器名少敲了一个字母,所以名字最好复制粘贴,别靠手打。

上宿主机 ls 一下就能看出问题:

$ ls -ld /etc/nginx/conf/nginx.conf
drwxr-xr-x 2 root root 4096 Sep 22 10:07 /etc/nginx/conf/nginx.conf

啥时候会撞上:要判断那个位置当前是文件还是目录。 这点最容易翻车:权限串第一个字母是 d,意味着这是 docker 自己 mkdir 建出来的空目录,根本不是配置文件。

现在的做法改成挂它所在的整个目录:

$ docker run -d --name nginx-front -p 8081:80 \
    -v /etc/nginx/conf.d:/etc/nginx/conf.d:ro nginx:1.20

啥时候会撞上:单独盖一个文件太容易碎,不如把整层目录挂进去。 这点最容易翻车:如果非要点对点盖单个文件,先 touch 把它坐实成文件,不然 docker 又会替你造一个目录。

把容器删掉并不会顺带清掉那些被误建的空目录,ls 一圈才发现已经攒了四个。

-v 后面那一长串写起来太容易出错,容器一多我就直接交给 compose 处理了。

posted @ 2026-10-26 19:49  kaka的程序人生  阅读(9)  评论(0)    收藏  举报