2

因为我有 Fedora,所以我尝试从他们的教程中运行 nginx 示例,我没有让 nginx 显示任何内容。

当我运行这个容器时:

podman run --name mynginx1 -p 8080:80 -d nginx

我得到了欢迎使用 nginx!页。

但是当我尝试运行安装了目录的示例时:

podman run --name mynginx2 \
  --mount type=bind,source=/home/simon/Dokumente/podman/nginx/content,target=/usr/share/nginx/html \
  -p 9080:80 -d nginx

我也收到了Welcome to nginx!页面,但我index.html在该源目录中有一个文件。

那个容器有什么问题?

4

3 回答 3

12

是的,确实是 @harik 的 SElinux 问题,但禁用 selinux 不是一个安全的选项,而是Z在安装卷时应用标志,这涉及应用此处此处提到的适当标签

podman run --name mynginx2 \
  -v /home/simon/Dokumente/podman/nginx/content:/usr/share/nginx/html:Z \
  -p 9080:80 -d nginx
于 2021-03-16T09:44:10.620 回答
2

当我们绑定卷时,它会失去对路径的权限/usr/share/nginx/html。这是因为 SELinux 的强制执行。

我的nginx1

root@f3fb6ece7eba:/usr/share/nginx/html# ls
50x.html  index.html

我的nginx2

root@af0803674402:/usr/share/nginx/html# ls
ls: cannot open directory '.': Permission denied

检查运行 podman 的主机的 SELinux 策略。

$ getenforce 
Enforcing

如果它处于Enforcing模式中,请将其更改为Permissive.

$ sudo setenforce 0
$ getenforce 
Permissive

重新运行 mynginx2 容器,exec并访问其中的内容/usr/share/nginx/html

$ podman run --name mynginx2 --mount type=bind,source=/home/tc/q2,target=/usr/share/nginx/html -p 9080:80 -d nginx
7ff2bdfb7ccfc6f90a9bd7957b08e48ea72d7c2303d47d11a412c6c8601976b6
$ podman exec -it mynginx2 bash
root@7ff2bdfb7ccf:/# cd /usr/share/nginx/html/
root@7ff2bdfb7ccf:/usr/share/nginx/html# ls
index.html


$ curl -I -s 127.0.0.1:8080
HTTP/1.1 200 OK

$ curl -I 127.0.0.1:9080
HTTP/1.1 200 OK
于 2020-05-30T08:14:20.967 回答
2

您可以运行带有标志的 podman 命令--privileged来禁用主机隔离:

$ podman run --name mynginx2 --privileged \
  --mount type=bind,source=/home/simon/Dokumente/podman/nginx/content,target=/usr/share/nginx/html \
  -p 9080:80 -d nginx

podman手册页:

--特权=真|假

授予此容器扩展权限。默认值为假。

默认情况下,Podman 容器是无特权的 (=false) 并且不能,例如,修改操作系统的某些部分。这是因为默认情况下,容器只允许有限地访问设备。“特权”容器被授予与启动容器的用户相同的设备访问权限。

特权容器关闭将容器与主机隔离的安全功能。Dropped Capabilities、受限设备、只读挂载点、Apparmor/SELinux 分离和 Seccomp 过滤器都被禁用。

无根容器不能拥有比启动它们的帐户更多的权限。

于 2020-10-27T14:47:47.897 回答