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-compose
来docker run
相同的过程来丢弃docker-compose
的问题
问候
问题是,在Docker服务启动后 ,我已经将EBS卷挂载到了/volume
。
该目录被安装在容器中,这就是docker inspect
看起来正确的原因,但是它挂载了被主机自己的挂载覆盖的预先存在的挂载点。
这个挂载是在Docker服务启动之后发生的,但是在任何容器启动之前很久,所以我没有想到Docker可能不会考虑之前发生的文件系统更改。
该解决scheme只是重新启动Docker服务。