Ubuntu 20.04下挂载本地文件夹至Docker镜像时进程无限停滞的问题排查与解决
Docker挂载本地文件夹到TigerGraph镜像的问题分析与解决
问题回顾
你在Ubuntu 20.04上尝试把本地/home/raphy/ConceptNet/文件夹挂载到TigerGraph Docker镜像,先后做了这些操作:
- 先查看本地镜像:
(base) raphy@pc:~$ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE docker.tigergraph.com/tigergraph latest 6c55bb15e2a6 7 days ago 10.6GB hello-world latest feb5d9fea6a5 6 weeks ago 13.3kB
- 第一次执行挂载命令,进程陷入无限停滞:
(base) raphy@pc:~$ sudo docker run -t -i -v /home/raphy/ConceptNet/ 6c55bb15e2a6
- 第二次尝试修改命令,结果Docker自动拉取了bash镜像,进入的是bash容器:
(base) raphy@pc:~$ sudo docker run -t -i -v /home/raphy/ConceptNet:/6c55bb15e2a6/ConceptNet bash
进入bash-5.1#后只能通过Ctrl+C终止进程。
操作错误分析
咱们来逐个梳理你操作里的问题:
- 第一个命令的挂载参数格式错误:
docker run的-v(挂载卷)参数要求格式是本地路径:容器内路径,你只写了本地路径/home/raphy/ConceptNet/,缺了容器内的目标路径,这会导致Docker无法正确解析你的挂载意图,进而进程停滞无响应。 - 第二个命令的启动命令错误:你在命令末尾加了
bash,这相当于告诉Docker“用bash镜像来启动容器”,而不是基于你目标的TigerGraph镜像(6c55bb15e2a6)启动并进入shell。所以Docker才会去拉取bash镜像,最后进入的是bash容器,完全偏离了你要操作TigerGraph容器的初衷。另外,你写的容器内路径/6c55bb15e2a6/ConceptNet也不合理,容器内的路径应该是一个合法的目录,用镜像ID命名路径没有实际意义。
正确解决方法
用这条命令就能完成挂载并正常启动TigerGraph容器:
(base) raphy@pc:~$ sudo docker run -d -p 14022:22 -p 9000:9000 -p 14240:14240 --name tigergraph --ulimit nofile=1000000:1000000 -v ~/ConceptNet/:/home/tigergraph/myconceptnet -t docker.tigergraph.com/tigergraph:latest
这里给你解释下关键参数的作用:
-d:让容器在后台运行,不会占用当前终端-p:把容器的端口映射到宿主机,方便你访问TigerGraph的服务--name:给容器起一个好记的名字tigergraph,后续管理容器更方便--ulimit:调整文件句柄限制,这是TigerGraph运行必需的配置-v ~/ConceptNet/:/home/tigergraph/myconceptnet:正确的挂载格式,把你本地的ConceptNet文件夹挂载到容器内的/home/tigergraph/myconceptnet目录- 最后指定了完整的镜像名和tag
docker.tigergraph.com/tigergraph:latest,确保用的是你目标的TigerGraph镜像
内容的提问来源于stack exchange,提问作者Raphael10
相关产品推荐
相关产品推荐

