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"的重要性,但源和目标确实看起来是正确的.
问题是在启动Docker服务/volume 之后,我已经将EBS卷挂载到了。
该目录已挂载在容器中,这就是为什么docker inspect看起来正确的原因,但它挂载了先前存在的挂载点,该挂载点已由主机自己的挂载覆盖。
挂载是在Docker服务启动之后发生的,但是在任何容器都没有真正启动之前,所以我并没有想到Docker可能不会尊重之前发生的文件系统更改。
解决方案只是重启Docker服务。
| 归档时间: |
|
| 查看次数: |
9511 次 |
| 最近记录: |