Docker踩坑指南
2020-10-22 本文已影响0人
LazzMan
使用docker compose数据卷绑定宿主机目录时,目录不存在时启动报错
docker compose在Version 2.3绑定数据卷时添加了长语法绑定卷支持。例如下面这种形式:
version: "2.4"
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- type: volume
source: mydata
target: /data
volume:
nocopy: true
- type: bind
source: ./static
target: /opt/app/static
networks:
webnet:
volumes:
mydata:
短语法则是这种形式:
volumes:
# Just specify a path and let the Engine create a volume
- /var/lib/mysql
# Specify an absolute path mapping
- /opt/data:/var/lib/mysql
# Path on the host, relative to the Compose file
- ./cache:/tmp/cache
# User-relative path
- ~/configs:/etc/configs/:ro
# Named volume
- datavolume:/var/lib/mysql
创建绑定安装时,使用长语法要求事先创建引用的文件夹,如果文件夹不存在则启动报错。如果使用短语法,宿主机目录不存在则会自动创建。
原理是长短语法底层使用的docker运行命令不同,短语法运行时使用的-v
进行卷绑定,而长语法则使用了-mount
进行卷绑定。
docker的绑定卷细节请参考官方文档Use bind mounts。
compose的更多细节请阅读docker compose数据卷。