首页 > 解决方案 > 如何使用 iptables 允许 docker 使用特定端口 --> dport 在容器内使用端口

问题描述

在第一步中,我想阻止所有传入我的服务器上运行的 docker 容器的流量。因此,我使用以下 iptables 条目作为我的外部接口 (ext_if) 的 ip:

iptables -I DOCKER-USER -i eth0 ! -s ext_if -j DROP

然后我想打开一个容器的特定端口,该端口在 docker-compose(我的 docker-compose.yml 在下面)文件中配置:

iptables -I DOCKER-USER -i docker0 -s 0.0.0.0/0 -p tcp --dport 9000 -j ACCEPT

当我尝试从外部在浏览器中打开http://myserver:9000时,它不起作用。

如何将端口 9000 配置为可从外部访问?

我在专用服务器上使用 docker 19.03.2 和 docker-compose 1.18.0。

这是我的 docker-compose.yml 文件:

version: '3.3'
services:
  test-tomcat:
    image: tomcat:9.0.19-jre8
    ports:
      - 9000:8080
    container_name: test-tomcat
    restart: always
    entrypoint: catalina.sh jpda run
  test-tomcat2:
    image: tomcat:9.0.19-jre8
    ports:
      - 9001:8080
    container_name: test-tomcat2
    restart: always
    entrypoint: catalina.sh jpda run

我玩了一点 iptable 规则并想通了,

iptables -I DOCKER-USER -i docker0 -s 0.0.0.0/0 -p tcp --dport 8080 -j ACCEPT

将让我访问http://myserver:9000http://myserver:9001。我认为这是因为两个容器都在内部监听 8080。

标签: dockerdocker-composeiptables

解决方案


推荐阅读