我只想在远程 Ubuntu 服务器上的 csf 防火墙后面本地访问 docker 容器。我更改了DOCKER
设置选项以/etc/csf/csf.conf
允许1
docker 更改 iptable 规则。
如果我使用 启动容器-p 8000:8000
,端口8000
将暴露给全世界(我可以使用 访问网站mydomain.com:8000
,正如预期的那样,但这不是我想要的)。如果我使用 启动容器,则-p 127.0.0.1:8000:8000
无法使用 访问它mydomain.com:8000
(这很好),但在这两种情况下,调用localhost:8000
都会导致ERR_EMPTY_RESPONSE
Chrome 或curl: (52) Empty reply from server
终端出现错误。
尝试了不同的容器和不同的端口。禁用 csf 后,它就可以正常工作,不会出现空回复错误,因此这一定与 csf 有关。
如何配置 csf 以仅在本地通过特定端口公开和访问 docker 容器?
旁注:我正在使用 远程在服务器上工作。ssh [email protected] -L 8000:localhost:8000
答案1
遇到了同样的情况。发现从 lo 到 docker0 的数据包被 CSF 的 OUTPUT 规则集阻止。
通过将“docker0”添加到 ETH_DEVICE_SKIP 来解决,这会导致 CSF 向此接口的 INPUT 和 OUTPUT 链添加一条全面的 ACCEPT 规则。这应该不是问题,因为据我所知,docker0 永远不应该绑定到物理接口,但拥有更多 Docker 经验的人可能会知道情况并非如此。