Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mac与linux上的Docker装载权限_Linux_Macos_Docker_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Linux,Macos,Docker,elasticsearch" /> elasticsearch,Linux,Macos,Docker,elasticsearch" />

mac与linux上的Docker装载权限

mac与linux上的Docker装载权限,linux,macos,docker,elasticsearch,Linux,Macos,Docker,elasticsearch,我试图用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运行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)

这种不一致是意料之中的吗

我打到这个了吗?

是的,这是意料之中的。自动将容器文件所有权映射到主机的所有权,以简化开发体验。通常,主机卷会将主机的uid/gid直接传递到容器中而不进行任何转换(除非您使用的是用户名称空间,但这通常会增加而不是解决此问题)。因此,如果该目录由主机上的uid 1003拥有,则该目录就是该文件在容器中的uid

主机卷隐式不可移植,它们取决于主机的状态。为了便于移植,请切换到docker管理的命名卷。它们在首次创建时包括一个初始化步骤,用于解决权限问题。

是的,这是预期的。自动将容器文件所有权映射到主机的所有权,以简化开发体验。通常,主机卷会将主机的uid/gid直接传递到容器中而不进行任何转换(除非您使用的是用户名称空间,但这通常会增加而不是解决此问题)。因此,如果该目录由主机上的uid 1003拥有,则该目录就是该文件在容器中的uid

主机卷隐式不可移植,它们取决于主机的状态。为了便于移植,请切换到docker管理的命名卷。它们在首次创建时包括一个初始化步骤,用于解决权限问题

$ 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!
$ 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