docker-compose卷没有安装到主机目录

我使用docker-compose进行部署,使用2 docker-compose.yml安装程序,我在本地构build映像,并从服务器上的docker-compose.yml集线器中提取。

除了build立vs拉图像,卷configuration是相同的。

本地:

 app: build: . volumes: - "/data/volume:/volume" 

在服务器上:

 app: image: username/repo:tag volumes: - "/data/volume:/volume" 

在我的Dockerfile中:

 volume /volume 

在本地我的卷装载到指定的目录很好,由应用程序创build的文件保持在容器外。 但是,在部署服务器上,这不会发生。

但是,即使我的部署脚本运行docker-compose down -v ,这可能会删除容器上的命名&匿名卷,但是通过部署创build并保留文件。

我确定我做错了什么,但是我什么都看不到。 它可能是一个caching问题? 初始部署的卷configuration不一样。

更多信息:

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

 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) 

…我认为我会用一个干净的石板来重新部署,那么:

 docker pull username/repo:tag docker-compose build --no-cache --force-rm docker-compose up -d 

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

还有更多的信息

运行docker inspect <container>服务器上的docker inspect <container>产生如下所示的挂载configuration:

 "Mounts": [ "Source": "/data/volume", "Destination": "/volume", "Mode": "rw", "RW": true, "Propagation": "rprivate" ] 

我注意到没有指定Driver,也不确定“rprivate”的意义,但Source和Destination似乎是正确的。

我build议在服务器上检查/ data / volume上的权限更改为777临时testing,如果这是问题。 另外用户服务器只是一台Linux机器? 或者是用docker-machine或类似的东西创build的虚拟环境。

您正在使用的卷不是匿名或已命名,但主机已装入。 docker中没有命令会删除主机挂载的卷。

我也build议使用docker run来代替docker-composedocker run相同的过程来丢弃docker-compose的问题

问候

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

该目录被安装在容器中,这就是docker inspect看起来正确的原因,但是它挂载了被主机自己的挂载覆盖的预先存在的挂载点。

这个挂载是在Docker服务启动之后发生的,但是在任何容器启动之前很久,所以我没有想到Docker可能不会考虑之前发生的文件系统更改。

该解决scheme只是重新启动Docker服务。