摘要
我尝试在Docker中挂载一个主机目录,但无法从容器中访问它,即使访问权限看起来很好。
详细信息
我正在做
sudo docker run -i -v /data1/Downloads:/Downloads ubuntu bash
然后
ls -al
它给了我:
total 8892
drwxr-xr-x. 23 root root 4096 Jun 18 14:34 .
drwxr-xr-x. 23 root root 4096 Jun 18 14:34 ..
-rwxr-xr-x. 1 root root 0 Jun 18 14:34 .dockerenv
-rwx------. 1 root root 9014486 Jun 17 22:09 .dockerinit
drwxrwxr-x. 18 1000 1000 12288 Jun 16 11:40 Downloads
drwxr-xr-x. 2 root root 4096 Jan 29 18:10 bin
drwxr-xr-x. 2 root root 4096 Apr 19 2012 boot
drwxr-xr-x. 4 root root 340 Jun 18 14:34 dev
drwxr-xr-x. 56 root root 4096 Jun 18 14:34 etc
drwxr-xr-x. 2 root root 4096 Apr 19 2012 home
还有更多类似的代码行(我认为这是相关的部分)。
如果我这样做了
cd /Downloads
ls
结果是
ls: cannot open directory .: Permission denied
主机是Fedora 20,Docker 1.0.0和go1.2.2。
哪里出了问题?
发布于 2014-06-21 03:01:33
这是一个SELinux问题。
您可以临时发出
su -c "setenforce 0"
要访问或添加SELinux规则的主机上,请运行以下命令
chcon -Rt svirt_sandbox_file_t /path/to/volume
发布于 2014-07-07 12:39:29
警告:此解决方案存在安全风险。
尝试以特权用户身份运行容器:
sudo docker run --privileged=true -i -v /data1/Downloads:/Downloads ubuntu bash
另一种选择(我还没有尝试过)是创建一个特权容器,然后在其中创建非特权容器。
发布于 2018-01-31 14:55:21
我也遇到过类似的问题。我的问题是由于主机的UID和容器用户的UID不匹配造成的。修复方法是将用户的UID作为参数传递给docker build
命令,并使用相同的UID创建容器的用户。
在DockerFile中:
ARG UID=1000
ENV USER="ubuntu"
RUN useradd -u $UID -ms /bin/bash $USER
在构建步骤中:
docker build <path/to/Dockerfile> -t <tag/name> --build-arg UID=$UID
在那之后,根据OP运行容器和命令就得到了预期的结果。
https://stackoverflow.com/questions/24288616
复制相似问题