Docker 容器无法在 cifs 共享内写入

Amr*_*Hab 1 cifs nas synology docker docker-compose

我有一个用于使用多个容器构建的媒体服务器的 docker compose,我希望这些容器能够读/写安装在主机上的 cifs 共享,在尝试了多种方法之后,我似乎无法让它们写入。这是已安装的共享:/etc/fstab

//192.168.X.X/Media /mnt/Media cifs cache=loose,credentials=/root/.smbcrd,vers=3.0 0 0
Run Code Online (Sandbox Code Playgroud)

这是 docker compose 的多个容器之一:

 emby:
image: linuxserver/emby
container_name: emby
environment:
  - PUID=998
  - PGID=100
  - TZ=Europe/Paris
  - UMASK_SET=022 #optional
volumes:
  - /mnt/Media/Configs/Emby:/config
  - /mnt/Media/Series:/data/series
  - /mnt/Media/Films:/data/movies
ports:
  - 8096:8096
  - 8920:8920 
restart: unless-stopped
Run Code Online (Sandbox Code Playgroud)

我正在学习 docker,我不认为在每个容器内安装 cifs 共享是解决方案,我需要在 docker compose 的卷部分安装共享吗?,共享是 Synology nas。有人可以帮忙吗?

ara*_*sch 5

Docker 的 CIFS 可能性

让容器挂载(不好的方法)

services:
  name:
    cap_add:
      - SYS_ADMIN
      - DAC_READ_SEARCH
    security_opt:
      - "apparmor=unconfined"
Run Code Online (Sandbox Code Playgroud)

Dockerfile: ENTRYPOINT ["/bin/bash", "mount.sh" ]

挂载.sh:

#!/bin/bash

mkdir /mnt/whatever
mount -v -t cifs -o username=xx,password=xx,vers=SMB-Version-Number,dir_mode=0744,file_mode=0744 //IP/Path /mnt/whatever

<start your container logic>
Run Code Online (Sandbox Code Playgroud)

由于安全性非常差,这种方法很糟糕,但在某些用例中可能会有所帮助。

让docker挂载

services:
  name:
     volumes:
      - my_mount:/mnt/whatever

volumes:
  my_mount: 
    driver_opts:
      type: cifs
      o: username=xx,password=xx,vers=SMB-Version-Number
      device: //IP/Path
Run Code Online (Sandbox Code Playgroud)

让主机挂载

mount -t cifs -o username=xx,password=xx, \               
  uid=dockeruid,forceuid, \
  gid=dockergid,forcegid, \                  
  file_mode=744,dir_mode=744 //IP/Path /mnt/whatever   
Run Code Online (Sandbox Code Playgroud)

然后使用此用户运行 docker 容器:

services:
  name:
    user: "dockeruid:dockergid"
    volumes:
      - /mnt/whatever:/mnt/whatever
Run Code Online (Sandbox Code Playgroud)