记一次在 docker compose 中使用volume的踩坑记录
现象:
使用docker compose 挂载 named volume 无效(且没有错误提示)
排查过程:
一开始是没有使用docker-compose命令,直接使用docker run -v 命令,挂载两个绝对路径,没有问题。
然后使用named volume,在这里使用了local-persist 插件,来指定数据卷(volume)在host上的位置。直接用docker run -v 命令,依然没有问题。
接下里打算放到docker compose里面,发现并没有挂载成功。
但是在docker compose里面,挂载两个绝对路径是ok的。
于是怀疑是volume的问题
此时使用docker inspect 查看 用docker compose 启动起来的,挂载named volume的容器
发现mount里面,挂载的named volume并不是我在docker-compose.yml填写的名称,而是多了一个前缀,这个前缀恰好是docker-compose.yml 文件所在的目录名称。
查了一下,发现果然不止我一个人被坑到orz Docker-compose prepends directory name to named volumes
其实应该直接使用docker inspect来排查的...应该会更快找到问题
解决办法:
有几种解决办法:
* 不手动创建volume,而是在docker-compose.yml中,设置volume的mountpoint
* 在docker-compose.yml中,添加external: true的选项到 volume中,参考[external](https://docs.docker.com/compose/compose-file/#external)
顺便附上我的docker-compose.yml文件
version: '3'
services:
django:
image: "registry.sensetime.com/spider/sensespider:v1.0"
volumes:
- spiderdata:/data
privileged: true
ports:
- "8000:8000"
working_dir: /home/renkuanze/workspace/sensespider
entrypoint: bash run.sh
tty: true
container_name: django
splash:
image: "scrapinghub/splash"
container_name: splash
network_mode: "service:django"
volumes:
spiderdata:
driver: local-persist
driver_opts:
mountpoint: /data/spider_data