docker-compose卷未安装到主机目录

num*_*407 7 docker docker-compose

我正在使用docker-compose进行部署,使用2 docker-compose.yml设置我在本地构建映像并从服务器上的docker hub拉出.

除了构建vs拉图像之外,卷配置也是相同的.

本地:

app:
  build: .
  volumes:
    - "/data/volume:/volume"
Run Code Online (Sandbox Code Playgroud)

并在服务器上:

app:
  image: username/repo:tag
  volumes:
    - "/data/volume:/volume"
Run Code Online (Sandbox Code Playgroud)

在我的Dockerfile中:

volume /volume
Run Code Online (Sandbox Code Playgroud)

本地我的卷安装到指定的目录很好,应用程序创建的文件持久存储在容器外.但是,在部署服务器上,这不会发生.

文件然而,创建,通过持续展开时,即使我的部署脚本运行docker-compose down -v这大概删除名为&容器上的匿名卷.

我确定我做错了什么,但我看不出是什么.这可能是一个缓存问题吗?初始部署时的卷配置不同.

更多信息:

实际上我似乎无法在部署之间强制丢失图像.我跑了:

docker-compose down -v --rmi all --remove-orphans
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
docker volume rm $(docker volume ls -q)
Run Code Online (Sandbox Code Playgroud)

...我认为会给我一个干净的石板进行重新部署,然后:

docker pull username/repo:tag
docker-compose build --no-cache --force-rm
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

...并且应该在已安装卷中的文件仍然存在,并且磁盘上已安装的目录中仍然没有任何内容.有任何想法吗?

还有更多信息

docker inspect <container>在服务器上运行会产生如下的挂载配置:

"Mounts": [
  "Source": "/data/volume",
  "Destination": "/volume",
  "Mode": "rw",
  "RW": true,
  "Propagation": "rprivate"
]
Run Code Online (Sandbox Code Playgroud)

我注意到没有指定驱动程序,并且不确定"rprivate"的重要性,但源和目标确实看起来是正确的.

num*_*407 6

问题是在启动Docker服务/volume 之后,我已经将EBS卷挂载到了。

该目录已挂载在容器中,这就是为什么docker inspect看起来正确的原因,但它挂载了先前存在的挂载点,该挂载点已由主机自己的挂载覆盖。

挂载是在Docker服务启动之后发生的,但是在任何容器都没有真正启动之前,所以我并没有想到Docker可能不会尊重之前发生的文件系统更改。

解决方案只是重启Docker服务。


rus*_*tyx 5

只需添加一下,如果您在Windows上进行开发,则应明确允许Docker访问您的C:驱动器。在执行此操作之前,所有映射的卷都将显示为空。

如果通过Hyper-V(适用于Windows的Docker)运行:

  • 转到“设置”->“共享驱动器”,选中“ C:”(

如果通过VirtualBox运行:

  • VBoxManage sharedfolder add default --name c --hostpath /c --automount来源