docker 无法挂载本地卷挂载没有这样的文件或目录

r69*_*r69 5 docker docker-compose

我正在尝试像这样运行我的图像:

version: '3.8'
services:
  gamit:
    image: myimage
    volumes:
      - app:/app
volumes:
  app:
    driver: local
    driver_opts:
      type: none
      device: ./app
      o: bind
Run Code Online (Sandbox Code Playgroud)

起初,我的目标是app在我的文件附近有一个目录docker-compose.yml(应用程序目录)应该保留app容器内部的目录(它已经包含一些重要数据)。我的部署场景假设该目录最初在主机上为空,然后跟上容器内部的更改。当我运行它时,docker compose up我的app目录附近docker-compose.yml仍然是空的。我注意到它/var/lib/docker/volumes/myimage/_data是用容器中的数据创建和填充的(我从另一个 stackoverflow 问题中假设我的device: ./app选项设置了主机目录的位置)。然后我删除了/var/lib/docker/volumes/myimage/目录,现在它抛出一个错误docker failed to mount local volume mount no such file or directory。我的总体目标是最初使用docker compose upapp目录运行,从容器内部填充它,然后将容器内部的所有更改放入其中。

小智 7

在 ubuntu 20.04、Docker 版本 20.10.17 和 Docker compose 版本 v2.6.0 中

我尝试使用:${PWD}/app而不是./app。像这样:

version: '3.8'
services:
  gamit:
    image: myimage
    volumes:
      - app:/app
volumes:
  app:
    driver: local
    driver_opts:
      type: none
      device: ${PWD}/app
      o: bind
Run Code Online (Sandbox Code Playgroud)

这对我来说可以。据我所知,对于 Docker 中的本地卷,您需要有一个绝对路径来安装。${PWD}环境变量显示项目的当前路径。但有时${PWD}在某些版本的 Docker 或某些版本的 Docker Compose 中不能很好地工作!

https://docs.docker.com/engine/install/linux-postinstall/有合适的信息