起因
中秋放假没有关机,肥来之后wsl上的docker-compose 和docker报错啦。
表现
docker-compose ps报错
root@YK-PC-00036-:~# docker-compose ps
-bash: /mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose: Permission denied
root@YK-PC-00036-:~# docker ps
-bash: /mnt/c/Program Files/Docker/Docker/resources/bin/docker: Permission denied
root@YK-PC-00036-:~# whereis docker
解决方案
使用的是windows docker desktop,将设置项 取消勾选->apply->重新勾选->apply。然后会自动重建目录,然后就ok了。
解决思路
- 权限问题
报错是权限问题,那有没有可能真的是权限问题。我们cd /mnt/c/Program\ Files/Docker/Docker/resources/bin/
看了下是有相关的命令的。同时查看修改时间,理论上是没有修改过。所以应该不是这里的问题,但目前也没什么方法,死马当活马医。我们直接chmod 777 *
,然后再执行以下docker ps
不出所料又报错了。所以我们先排查权限这一块的问题。 - 文件更新?
这个是我猜想的,因为过了个中秋没关机不知道docker desktop是不是自动更新了。-
换个思路排查文件,上面的操作过后我们知道了docker命令不是
/mnt/c/Program\ Files/Docker/Docker/resources/bin/
下面的,那系统到底执行的是哪个呢。 -
我们执行
whereis docker
发现/usr/bin/docker
,切到目录去查找一下。
有点子意思,一个软连接到/mnt/wsl
下面去了,其实到这里直觉就告诉我应该是找对了。 -
切到
/mnt/wsl/docker-desktop
追查下去,发现/mnt/wsl/
底下就没得这个目录。
看了下修改时间也很诡异,刚好就是在我发现docker命令执行不了的时候前一点点。这也从侧面加深了我的猜想。 -
现在既然排查到了,就想着怎么来解决了。百度了n多竟然没有发现解决方案,脑阔痛。突然灵光一闪,如果只是目录丢失那重启的时候一般都是会重建的。这个其实是我从goland联想过来的。现在就是想办法让他重建目录了。
-
首先肯定是从docker desktop入手,重启了发现没啥用。这时候思考是不是我的打开方式不对?想了下目录里有wsl这一层,对应的docker desktop中跟这个有关系的好像只有配置里面有几个勾选有关。然后我们再一次进行尝试,取消勾选然后重新勾选。
老泪纵横,目录终于肥来了。 -
验证一下
cd /var/www/dev_docker && docker-compose ps
-
打完收工
-
总结
- 这种生产工具,最好是关闭自动更新。不然真的是不知道会出什么杂毛问题。
- 排查问题的时候,善于观察到目录的修改时间。虽然是很小的一个东西,但是能起到很好的效果。
- 善于联想,比如这次处理问题其实就是联想到了上次的goland自动生成目录。