我这里有一个奇怪的问题,我不知道它到底出了什么问题。
我在我的 Linux 机器(Ubuntu 16.04 LTS)上的 Docker 容器中运行所有内容:
docker run -ti --rm promregator/promregator:0.2.1 /bin/bash
(注:该图像可通过 公开获取hub.docker.com
)。命令
docker version
(在主机上)返回
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 22:01:48 2016
OS/Arch: linux/amd64
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 22:01:48 2016
OS/Arch: linux/amd64
在容器中,我想要创建一个这样的文件:
promregator@6a68713fafc9:/$ cd /opt/promregator
promregator@6a68713fafc9:/opt/promregator$ touch test
touch: cannot touch 'test': Permission denied
(promregator 是镜像默认运行的用户)。注意
- 该目录直接来自图像并且不是卷映射的。
该目录由同一个用户拥有,权限为 0750:
promregator@6a68713fafc9:/opt/promregator$ ls -al total 34348 drwxr-x--- 2 promregator promregator 4096 Apr 1 01:00 . drwxr-xr-x 5 root root 4096 Mar 20 01:01 .. -rw-r----- 1 promregator promregator 35159385 Apr 1 00:59 promregator.jar -rwxrwx--- 1 promregator promregator 642 Apr 1 00:57 promregator.sh
从数字上讲,用户是 1000
promregator@6a68713fafc9:/opt/promregator$ ls -aln . total 34348 drwxr-x--- 2 1000 1000 4096 Apr 1 01:00 . [...]
还请注意,同样的操作也适用于/home/promregator
:
promregator@6a68713fafc9:/opt/promregator$ cd /home/promregator
promregator@6a68713fafc9:~$ touch test
promregator@6a68713fafc9:~$ ls -al .
total 8
drwx------ 2 promregator promregator 4096 Apr 7 11:45 .
drwxr-xr-x 4 root root 4096 Apr 7 11:45 ..
-rw-r--r-- 1 promregator promregator 0 Apr 7 11:45 test
promregator@6a68713fafc9:~$ ls -aln .
total 8
drwx------ 2 1000 1000 4096 Apr 7 11:45 .
drwxr-xr-x 3 0 0 4096 Apr 7 11:45 ..
-rw-r--r-- 1 1000 1000 0 Apr 7 11:45 test
请注意,如果我使用以下方式以 root 身份运行容器
docker run -ti --rm -u root promregator/promregator:0.2.1 /bin/bash
我可以在第一个位置创建该文件:
root@eb29fa8acb95:/# cd /opt/promregator/
root@eb29fa8acb95:/opt/promregator# touch test
这告诉我用户身上有一些“奇怪”的东西promregator
。
在另一台主机上(我比较了镜像的 sha1 id),如果容器是用 启动的,则可以按预期创建文件docker run -ti --rm promregator/promregator:0.2.1 /bin/bash
。该主机的版本信息表明
Client:
Version: 17.12.0-ce
API version: 1.35
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:11:19 2017
OS/Arch: linux/amd64
Server:
Engine:
Version: 17.12.0-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:09:54 2017
OS/Arch: linux/amd64
Experimental: false
有什么想法、提示……对我来说这可能是什么吗?
提前致谢!
答案1
我今天也遇到了同样的问题。我的解决办法是通过“setenforce 0”关闭selinux。