【发布时间】:2015-07-14 03:19:18
【问题描述】:
我在这里真的很挣扎,用谷歌搜索了很多......到目前为止没有任何解决方案。
我在我的 Ubuntu 机器上运行了几个 docker 容器(nodejs、mongodb、...)。不幸的是,Docker (v1.6) 将所有端口公开!由于我有一个 nginx 反向代理(也在 docker 容器中),我只希望端口 80 可以从外部访问 - UFW 在这种情况下不起作用,因为 Docker 在 iptables 上运行。
所以我尝试了以下建议:
-
将 DOCKER_OPTS 更改为以下内容(并重新启动 docker 服务):
DOCKER_OPTS="--ip 127.0.0.1 --iptables=false" -
在我的 iptables 中添加了以下规则(对于 nodejs 端口 3001)
iptables -I PREROUTING 1 -t mangle ! -s 127.0.0.1 -p tcp --dport 3001 -j ACCEPT iptables -I PREROUTING 2 -t mangle -p tcp --dport 3001 -j DROP
=> 两个更改都不起作用?
还有其他可能对这里有所帮助的建议吗?
简而言之:我只希望端口 80(nginx docker 容器)公开...所有其他(例如 3001)在不从 localhost 访问时都应该被拒绝!
更新:
我忘了提到我用“-p 3001:3000”启动容器(例如,对于 nodejs 应用程序)。
我不希望此端口 (3001) 可从网络访问...但只能从其他容器或 docker 主机系统访问)。
非常感谢您。
问候,
萨沙
【问题讨论】:
-
"Docker (v1.6) 公开所有端口": docker 默认不公开任何端口。
-
除非你用
--net="host"启动你的容器 -
感谢您的 cmets...您是对的...默认情况下它不公开任何内容...但是当我使用 -p 3001:3000 启动它时,它会公开端口 3001。 ..我找不到拒绝任何外部请求的方法。
标签: ubuntu nginx docker port iptables