linux - mac 与 linux 上的 Docker 挂载权限
问题描述
我试图使用 docker 运行 elasticsearch。并希望使用卷来保存数据。这是我使用的命令。
docker run -it --rm -v $(pwd)/elasticdata:/usr/share/elasticsearch/data elasticsearch:7.5.1
这在我的 Mac 上运行良好。但是当我尝试在 Travis CI 中运行它时,它因/usr/share/elasticsearch/data/
目录权限被拒绝而失败。
这是我注意到的与 OSX 与 Linux 上 docker 卷权限的不一致之处
OSX (Docker 版本 19.03.8,构建 afacb8b)
$ ls -l elasticdata/.keepme
-rw-r--r-- 1 nikhil staff 0 Apr 3 13:07 elasticdata/.keepme
$ docker run -it --rm -v $(pwd)/elasticdata:/usr/share/elasticsearch/data elasticsearch:7.5.1 namei -l /usr/share/elasticsearch/data/.keepme
f: /usr/share/elasticsearch/data/.keepme
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root share
drwxrwxr-x elasticsearch root elasticsearch
drwxr-xr-x root root data
-rw-r--r-- root root .keepme <---------------- owned by root!
Ubuntu (Docker 版本 18.06.1-ce,构建 e68fc7a)
$ namei -l elasticdata/.keepme
f: elasticdata/.keepme
drwxrwxr-x nowalekar nowalekar elasticdata
-rw-rw-r-- nowalekar nowalekar .keepme
$ docker run -it --rm -v $(pwd)/elasticdata:/usr/share/elasticsearch/data elasticsearch:7.5.1 namei -l /usr/share/elasticsearch/data/.keepme
f: /usr/share/elasticsearch/data/.keepme
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root share
drwxrwxr-x elasticsearch root elasticsearch
drwxrwxr-x 1013 1013 data
-rw-rw-r-- 1013 1013 .keepme
这种不一致是预期的吗?
我打这个:http ://turnoff.us/geek/before-devops-after-devops/ ?
解决方案
是的,这是意料之中的。Osxfs自动将容器文件所有权映射到主机的所有权,以提供更轻松的开发体验。通常,主机卷会将主机的 uid/gid 直接传递到容器中而无需任何转换(除非您使用用户命名空间,但这通常会增加而不是解决此问题)。因此,如果该目录由主机上的 uid 1003 拥有,那么这就是文件在容器中的 uid。
主机卷是隐式不可移植的,它们取决于主机的状态。为了便携性,切换到由 docker 管理的命名卷。它们在首次创建时包括一个用于解决权限问题的初始化步骤。
推荐阅读
- python - wkt 和 str 的区别
- shell - 如何在命令行中修复“找不到命令”
- django - 为什么django cart template_tags 会带来报错信息 object has no attribute 'is_authenticated'
- python - 如何在给定的圆形/正方形中生成 monteCarlopi 函数?
- c++ - Qt如何设置窗口图标
- spring-boot - Slf4j 日志未显示在 Docker 容器日志中
- pyspark - 我应该在 int 列上使用 StringIndexer 吗?
- firebase - 部署计划的云功能需要哪些服务帐户角色?
- terraform - 在 terraform 计划期间,ec2_instance 的 Terraform 导入处于替换模式
- php - symfony 5,css,js,图像未在 PROD 中加载