首页 > 解决方案 > 一个 docker 容器,一个 samba 共享和权限问题

问题描述

以下 docker 命令:

sudocker run --restart unless-stopped --name lancache -v /mnt/steamcache/CacheServer/cache:/data/cache -v /mnt/steamcache/CacheServer/logs:/data/logs -p My-Server-IP:80:80 lancachenet/monolithic:latest

还有我的挂载命令:

sudo mount -t cifs -o username=MYUSERNAME //My-Samba-File-Server-IP/games /mnt/steamcache

Docker 能够在我的 samba 共享中创建两个文件夹,但没有获得在该文件夹“缓存”中创建文件夹的权限。

2020/09/01 16:41:28 [crit] 1752#1752: *1 mkdir() "/data/cache/cache/7d" 在读取上游时失败(13:权限被拒绝),客户端:客户端 IP,服务器:,请求:“GET /depot/1/manifest/5928322771446233610/5 HTTP/1.1”,上游:“http://155.133.248.29:80/depot/1/manifest/5928322771446233610/5”,主机:“cache18- ams1.steamcontent.com" 2020/09/01 16:41:28 [crit] 1752#1752: *2 mkdir() "/data/cache/cache/c2" 在读取上游时失败(13:权限被拒绝),客户端:客户端IP,服务器:,请求:“GET /depot/3/manifest/8096513071444961518/5 HTTP/1.1”,上游:“http://155.133.248.29:80/depot/3/manifest/8096513071444961518/5” ,主机:“cache18-ams1.steamcontent.com” 2020/09/01 16:41:28 [crit] 1754#1754: *3 mkdir() "/data/cache/cache/3e" 失败 (13:权限被拒绝)同时读取上游,客户端:Client-IP,服务器:,请求:“GET /depot/2/manifest/2139852524811213490/5 HTTP/1.1”,上游:“http://155.133.248.13:80/depot/ 2/manifest/2139852524811213490/5",主机:"cache2-ams1.steamcontent.com" 2020/09/01 16:41:28 [crit] 1753#1753: *5 mkdir()"/data/cache/cache/ 78" 在读取上游时失败(13:权限被拒绝),客户端:客户端 IP,服务器:,请求:“GET /depot/74/manifest/5000716531281502924/5 HTTP/1.1”,上游:“http://155.133. 248.13:80/depot/74/manifest/5000716531281502924/5",主机:"cache2-ams1.steamcontent.com" 2020/09/01 16:44:27 [crit] 1755#1755: *12 mkdir()"/数据/缓存/缓存/2b“在读取上游时失败(13:权限被拒绝),客户端:客户端IP,服务器:,请求:”GET /appinfo/1042420/sha/c87d5ae3d06609fd093145ed24417160ca271eef.txt.gz HTTP/1.1", upstream: "http://95.101.90.177:80/appinfo/1042420/sha/c87d5ae3d06609fd093145ed24417160ca271eef.txt.gz", host: "clientconfig.akamai .steamstatic.com”

任何建议我做错了什么?

谢谢你。

编辑:我在虚拟机上使用 Ubuntu。Samba-Share 属于 Synology NAS。

没有人有线索吗?

标签: dockerpermissionssambacifs

解决方案


我相信你可以分两步解决这个问题:

  1. 使用以下命令获取您的主机用户 uid 和 gid:

    id -u && id -g

  2. 在运行命令中添加-u [用户名或 UID(格式:<name|uid>[:<group|gid>])]

前任。假设您的主机用户的 UID=1000 和 GID=1000 您的 docker run 命令应该是:

docker run \
--restart unless-stopped \
--name lancache \
-v /mnt/steamcache/CacheServer/cache:/data/cache \
-v /mnt/steamcache/CacheServer/logs:/data/logs \
-p My-Server-IP:80:80 \
-u 1000:1000 \
lancachenet/monolithic:latest

或者把它们放在一起:

docker run \
--restart unless-stopped \
--name lancache \
-v /mnt/steamcache/CacheServer/cache:/data/cache \
-v /mnt/steamcache/CacheServer/logs:/data/logs \
-p My-Server-IP:80:80 \
-u "$(id -u):$(id -g)" \
lancachenet/monolithic:latest

这样做可以避免 docker 容器和主机之间出现很多权限错误。


推荐阅读