有人在这里成功设置了容器内的 apache 并允许从主机访问服务器状态吗?我已经尝试在 docker 中使用 --add-host 参数,然后在配置文件中允许该主机,但我仍然收到 Forbidden 错误消息
服务器状态的 httpd 配置文件设置如下:
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from mainserver
</Location>
我正在用以下命令创建 docker 容器:
docker run -e 80:80 httpdimage /usr/sbin/httpd -DFOREGROUND
然后,我使用以下 curl 命令从主机进行测试:
curl http://localhost/server-status
然后我收到错误消息:
禁止
您无权访问此服务器上的 /server-status。
答案1
这里可能发生一些事情。
首先,从你的容器的角度来看,你的主机有你的docker0
网桥的地址;这是你容器内部的默认路由,因此你可以像这样获取它:
host_address=$(ip route | awk '$1 == "default" {print $3}')
你可以ENTRYPOINT
在启动容器时用脚本或其他东西将其替换到 Apache 配置中,得到如下内容:
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 172.47.42.1
</Location>
如果您运行的是 Apache 2.4,则此方法无效。在 Apache 2.4 中,Allow
和Deny
指令已被替换为较新的语法,因此您实际上需要:
<Location /server-status>
SetHandler server-status
Require ip 172.17.42.1
</Location>
这就是最终在我的系统上运行的程序。