Docker Compose容器持续存活问题及Azure Blob存储挂载咨询
问题解决与替代方案
一、容器退出与挂载失败的修复
1. 修复容器退出问题(sleep infinity未执行)
你的dockerfile.data中使用了数组格式的CMD,这种模式下Docker会直接执行命令,不会调用Shell解析&&这类语法,导致blobfuse2 mount执行完成后容器直接退出,sleep infinity根本没运行。
修复方法二选一:
方法1:改用Shell模式的CMD
修改dockerfile.data的CMD为字符串格式:
FROM blobfuse2:latest COPY config/ config/ RUN mkdir /tmp/.azcache && mkdir /mnt/azmnt CMD blobfuse2 mount all /mnt/azmnt/ --config-file=config/storage_data.yaml && sleep infinity
方法2:使用启动脚本
创建start.sh脚本:
#!/bin/bash # 执行挂载操作 blobfuse2 mount all /mnt/azmnt/ --config-file=config/storage_data.yaml # 保持容器运行 sleep infinity
修改dockerfile.data:
FROM blobfuse2:latest COPY config/ config/ COPY start.sh /start.sh RUN mkdir /tmp/.azcache && mkdir /mnt/azmnt && chmod +x /start.sh CMD ["/start.sh"]
2. 修复本地目录无内容的问题
你的docker-compose.yaml中挂载方向错误:- /mnt:/mnt/azmnt是将本地/mnt目录覆盖容器内的/mnt/azmnt,导致容器内的Blob挂载操作被覆盖,本地无法看到存储内容。
正确做法是将容器内已挂载Blob的目录映射到本地指定路径,比如:
version: "3.9" services: diffusion_data: build: context: . dockerfile: dockerfile.data privileged: true volumes: # 将容器内的/mnt/azmnt映射到本地/mnt/azmnt - /mnt/azmnt:/mnt/azmnt
二、Apple Silicon Mac无需VNet挂载Azure Blob的替代方案
推荐使用rclone工具,支持arm64架构,无需容器或VNet即可直接挂载:
- 安装rclone:
brew install rclone - 配置Azure Blob存储:执行
rclone config,按照提示添加存储账户名、密钥等信息,完成后会生成一个配置名称(比如azure_blob) - 挂载到本地:执行
rclone mount azure_blob:你的容器名 /本地挂载路径 --daemon - 卸载时:执行
fusermount -u /本地挂载路径(或umount /本地挂载路径)
内容的提问来源于stack exchange,提问作者FrsECM
相关产品推荐
相关产品推荐

