如何将端口限制为 docker-machine 创建的主机?

How can I restrict ports to a host created by docker-machine?

我想创建一个只接受来自特定 IP 的 5432 连接的数据库机器。我要允许连接到此数据库机器的其他机器不是 运行 docker。我已经使用此 docker-compose 文件在数字海洋上使用 docker-machine 部署了主机:

postgres:
  restart: always
  image: postgres:latest
  volumes:
    - /tmp/postgrescont:/tmp
  volumes_from:
    - data
  env_file: .dbenv
  ports:
    - "5432:5432"

data:
  restart: always
  image: postgres:latest
  volumes:
    - /var/lib/postgresql
  command: "true"

并尝试仅允许来自另一个特定主机的流量,如下所示:

$ iptables -A INPUT -p tcp --dport 5432 -s <ip address of certain other host> -j ACCEPT
$ iptables -A INPUT -p tcp --dport 5432 -j DROP # deny other traffic

但是,出于某种原因,我仍然可以从不需要的主机进行连接。知道为什么它不起作用吗?

这就是我能够将端口 5432 限制到某个 IP 的方法:

iptables -I DOCKER 1 -p tcp ! -s <other_host_ip_allowed> --dport 5432 -j DROP

我插入的规则是 DOCKER 链的第一条规则,并删除任何其他不是我指定的 IP。

这正是 Docker 推荐的。

Docker’s forward rules permit all external source IPs by default. To allow only a specific IP or network to access the containers, insert a negated rule at the top of the DOCKER filter chain. For example, to restrict external access such that only source IP 8.8.8.8 can access the containers, the following rule could be added:

$ iptables -I DOCKER -i ext_if ! -s 8.8.8.8 -j DROP

Docker Networking