由于使用了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
我也获得了欢迎使用nginx!页面,但是在该源目录中有一个index.html
文件。
那个容器有什么问题?
答案 0 :(得分:2)
您可以使用带有--privileged
标志的podman命令来禁用主机隔离:
$ 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
手册页中:
-privileged = true | false
授予该容器扩展的特权。默认值为false。
默认情况下,Podman容器没有特权(= false),并且不能, 例如,修改操作系统的某些部分。这是因为 默认情况下,仅允许容器对设备进行有限访问。一种 授予“特权”容器与用户相同的设备访问权限 启动容器。
特权容器关闭隔离的安全功能 来自主机的容器。功能下降,设备受限, 只读挂载点,Apparmor / SELinux分离和Seccomp 过滤器全部被禁用。
无根容器不能具有比该帐户更多的特权 发射了他们。
答案 1 :(得分:2)
是的,确实是 @harik 的 SElinux 问题,但禁用 selinux 不是一个安全的选项,而是在安装卷时应用 Z
标志,这涉及应用上述 {{3} } 还有here
podman run --name mynginx2 \
-v /home/simon/Dokumente/podman/nginx/content:/usr/share/nginx/html:Z \
-p 9080:80 -d nginx
答案 2 :(得分:1)
当我们绑定卷时,它将失去对路径/usr/share/nginx/html
的许可。发生这种情况是由于SELinux的强制执行。
mynginx1
root@f3fb6ece7eba:/usr/share/nginx/html# ls
50x.html index.html
mynginx2
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