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 个文件。
这不是权限问题,因为
- 共享 CIFS 目录中的所有文件都相同
- 如果我从容器内打开一个隐藏文件,它会定期打开(例如使用 vi)
- 如果我使用“rm *”命令从容器中删除共享目录中的所有文件,并且在我 运行“ls”之后我看到 4 个文件以前被隐藏
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,您的问题似乎已解决
我有一个 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 个文件。
这不是权限问题,因为
- 共享 CIFS 目录中的所有文件都相同
- 如果我从容器内打开一个隐藏文件,它会定期打开(例如使用 vi)
- 如果我使用“rm *”命令从容器中删除共享目录中的所有文件,并且在我 运行“ls”之后我看到 4 个文件以前被隐藏
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,您的问题似乎已解决