我正在使用docker进行部署,在其中我在本地构建映像,并从服务器上的docker-compose.yml
集线器中提取映像。
除了构建vs拉动图像之外,卷配置也是一样的。
当地:
app:
build: .
volumes:
- "/data/volume:/volume"
在服务器上:
app:
image: username/repo:tag
volumes:
- "/data/volume:/volume"
在我的Dockerfile中:
volume /volume
在本地,我的卷挂载到指定的目录,由应用程序创建的文件保存在容器外。然而,在部署服务器上,这种情况不会发生。
然而,文件是通过部署创建和持久化的,即使我的部署脚本运行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)
..。我以为这会给我留下一张重新部署的白纸,然后:
docker pull username/repo:tag
docker-compose build --no-cache --force-rm
docker-compose up -d
..。应该在挂载卷中的文件仍然是,,而磁盘上的挂载dir中仍然没有任何文件。有什么想法吗?
更多的信息
在服务器上运行docker inspect <container>
会产生如下的挂载配置:
"Mounts": [
"Source": "/data/volume",
"Destination": "/volume",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
]
我注意到没有指定驱动程序,也不确定"rprivate“的意义,但是源和目的地似乎是正确的。
发布于 2016-10-21 12:56:54
问题是,在码头服务/volume
启动后,我安装了一个EBS卷。
目录被安装在容器中,这就是为什么docker inspect
看起来是正确的,但是它安装了由主机自己的挂载覆盖的预先存在的挂载点。
这个挂载是在Docker服务启动之后进行的,但在任何容器实际启动之前很久,所以我没有想到Docker可能不尊重前面发生的文件系统更改。
解决方案只是重新启动Docker服务。
发布于 2018-06-05 08:23:41
发布于 2016-10-20 15:30:30
我建议在服务器上检查/data/卷上的权限,将其改为777临时权限,以便进行测试,如果这是问题的话。另外,用户服务器只是一台Linux机器?或者是一个虚拟环境,它是用坞机或类似的东西创建的。
您使用的卷不是匿名的或命名的,而是已挂载的主机。在docker中没有删除主机挂载卷的命令。
我还建议使用docker run
而不是docker-compose
来执行相同的过程,以丢弃docker-组合中的一个问题。
问候
https://stackoverflow.com/questions/40157756
复制相似问题