Docker踩坑指南

使用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数据卷。

你可能感兴趣的:(Docker踩坑指南)