Docker Compose挂载NFS与SMB共享目录
Docker Compose 挂载 NFS 与 SMB 共享目录
前置要求
宿主机必须安装对应客户端工具,否则Docker驱动无法识别文件系统类型。
# Debian / Ubuntu
apt-get update && apt-get install -y nfs-common cifs-utils
# CentOS / RHEL / Rocky
yum install -y nfs-utils cifs-utilsNFS挂载配置
volumes:
nfs_mount:
driver_opts:
type: "nfs"
o: "addr=<NFS服务器IP>,nolock,rw"
device: ":/<远程路径>"字段说明
| 字段 | 含义 |
|---|---|
| type | 文件系统类型,固定填nfs |
| device | 远程路径,:后是NFS导出的目录 |
| o | 挂载参数 |
常用挂载选项
| 选项 | 作用 |
|---|---|
| addr= | NFS服务器地址 |
| nolock | 建议加,NFSv3在容器内锁文件易出问题,可避免文件锁卡死 |
| rw | 读写权限 |
| nfsvers=4 | 强制使用NFSv4 |
| proto=tcp | 强制走TCP |
示例
volumes:
nfs_mount:
driver_opts:
type: "nfs"
o: "addr=192.168.0.214,nolock,rw,nfsvers=4,proto=tcp"
device: ":/E/share"SMB / CIFS挂载配置
volumes:
smb_mount:
driver: local
driver_opts:
type: "cifs"
o: "username=<SMB用户名>,password=<SMB密码>,file_mode=0755,dir_mode=0755,uid=101,gid=101"
device: "//<服务器IP>/<共享路径>"字段说明
| 字段 | 含义 |
|---|---|
| driver | 卷驱动,固定填local |
| type | 文件系统类型,固定填cifs |
| device | SMB共享路径,用正斜杠 |
| o | 挂载参数 |
常用挂载选项
| 选项 | 作用 |
|---|---|
| username= / password= | SMB凭据 |
| file_mode=0755 / dir_mode=0755 | 新文件/目录的默认权限 |
| uid=101 / gid=101 | 文件属主映射到容器内UID/GID(需与容器内进程一致) |
| vers=3.0 | 强制SMB协议版本 |
| domain= | Windows AD域用户登录时填写域名 |
查看进程UID/GID
在容器内执行以下命令
95ede727b666:/var/www/html# id nginx
uid=101(nginx) gid=101(nginx) groups=101(nginx),82(www-data),101(nginx)示例
volumes:
smb_mount:
driver: local
driver_opts:
type: "cifs"
o: "username=<SMB用户名>,password=<SMB密码>,file_mode=0755,dir_mode=0755,uid=101,gid=101"
device: "//192.168.0.3/share/backup"完整 docker-compose.yml 示例
services:
db:
image: mariadb:lts
command: --transaction-isolation=READ-COMMITTED
restart: always
volumes:
- "./db:/var/lib/mysql"
environment:
- MYSQL_ROOT_PASSWORD=<数据库密码>
- MARIADB_AUTO_UPGRADE=1
- MARIADB_DISABLE_UPGRADE_BACKUP=1
env_file:
- db.env
app:
image: kodcloud/kodbox
restart: always
ports:
- "81:80"
volumes:
- "./site:/var/www/html"
- nfs_mount:/mnt/nfs
- smb_mount:/mnt/smb
environment:
- MYSQL_HOST=db
- REDIS_HOST=redis
env_file:
- db.env
depends_on:
- db
- redis
redis:
image: redis:alpine
restart: always
volumes:
nfs_mount:
driver_opts:
type: "nfs"
o: "addr=192.168.0.214,nolock,rw,nfsvers=4,proto=tcp"
device: ":/E/share"
smb_mount:
driver: local
driver_opts:
type: "cifs"
o: "username=<SMB用户名>,password=<SMB密码>,file_mode=0755,dir_mode=0755,uid=101,gid=101"
device: "//192.168.0.3/share/backup"