ls 命令结果在 CIFS 安装目录的 docker 容器中不正确(通过 docker-compose)

ls command result NOT CORRECT in docker container in a CIFS mounted directory (via docker-compose)

我有一个 docker-compose 项目,它启动一个服务,在容器目录上安装 CIFS 共享。 以下是docker-compose.yml的一部分:

version: "2"
...
services:
   myservice:
   ...
      volumes:
        - wr-imp:/opt/data
...
volumes:
  wr-imp:
    driver: local
    driver_opts:
       type: cifs
       device: "//192.168.131.18/"
       o: "addr=192.168.131.18,rw"
       o: "username=abc,password=cba,domain=DOMINIO,file_mode=0777,dir_mode=0777"

基础 docker 图像是 Alpine 3.9:https://dl-cdn.alpinelinux.org/alpine/v3.9/

docker 容器 myservice 正确启动,一切正常。 如果我使用“docker exec -it -uroot myservice sh ”在 docker 容器中打开一个 shell 并在 /opt/data 上进行 cd,我可以正确列出(“ls”)所有共享 CIFS 中的文件,但前提是文件数量很少。

例如,如果我将 355 个文件放入共享文件系统(例如来自 windows 系统),我只看到 ls 命令列出的 351 个文件(如果我 运行 "ls - 1 | wc -l" 或 "ls -ls") 来自 docker 容器(在 "docker exec -uroot -it myservice sh" 和 "cd /opt/data" 命令之后)

如果我使用 /etc/fstab:

在 docker 主机(Red Hat 7.6 Maippo 发行版)上安装 CIFS
//192.168.131.18   /DataTest     cifs  vers=1.0,username=abc,password=cba,domain=DOMINIO    0 0 

如果我 运行 命令“ls”或“ls -la”或“ls -1 | wc -l”,我会看到 355 个文件。

这不是权限问题,因为

docker版本:

Client: 
   Version:           1.13.1
   API version:       1.26
   Package version:   docker-1.13.1-109.gitcccb291.e17_7.x86_64
   Go version:        go1.10.3
   Git commit:        cccb291/1.13.1
   Built:             Thu Jan 30 06:20:45 2020
   OS/Arch:           linux/amd64
Server:
   Version:          1.13.1
   API version:      1.26 (minimum version 1.12)
   Package version:  docker-1.13.1-109.gitcccb291.e17_7.x86_64
   Go version:       go1.10.3
   Git commit:       cccb291/1.13.1
   Built:            Thu Jan 30 06:20:45 2020
   OS/Arch:          linux/amd64
   Experimental:     false

docker-撰写版本:

docker-compose version 1.24.1, build 4667896b
docker-py version 3.7.3
CPython version 3.6.8
OpenSSL version: OpenSSL 1.1.0j 20 Nov 2018

我可以确认使用相同的 docker-compose 版本我能够重现您的问题。

尽管如此尝试升级到 Docker 版本 20.10.7,构建 f0df350,您的问题似乎已解决