限制网络访问但允许 运行 Docker 容器的特定 IP
Limit Network access but allow a specific IP for a Running Docker Container
我尝试使用 docker 容器,其中只能从 运行 容器访问特定的 IP 地址。
iptables 仅在特权 docker 容器中工作。但是用户可以自己更改 iptables。
一个不错的主意是使用 docker 文件和 iptables 创建一个 docker 图像。但是在创建图像时没有特权选项。
有人知道如何解决这个问题吗?
最佳
每个 docker 容器都有一个唯一的 IP 地址,因此如果您想要允许地址为 172.17.0.21 的容器并且您希望它能够 仅 访问地址8.8.8.8,你可以这样做:
iptables -A FORWARD -s 172.17.0.21 -d 8.8.8.8 -j ACCEPT
iptables -A FORWARD -s 172.17.0.21 -j REJECT --reject-with icmp-host-prohibited
也可以使用 nsenter
命令在 非特权容器中修改 iptables 规则 。例如,如果您启动一个 Docker 容器:
docker run --name example -d myimage
您可以像这样获取该容器的 PID:
pid=$(docker inspect -f '{{.State.Pid}}' example)
然后在该容器的网络命名空间内使用 nsenter
到 运行 命令:
nsenter -t $pid -n iptables ...
这些命令将运行没有容器内命令运行的能力限制。
我尝试使用 docker 容器,其中只能从 运行 容器访问特定的 IP 地址。 iptables 仅在特权 docker 容器中工作。但是用户可以自己更改 iptables。 一个不错的主意是使用 docker 文件和 iptables 创建一个 docker 图像。但是在创建图像时没有特权选项。 有人知道如何解决这个问题吗?
最佳
每个 docker 容器都有一个唯一的 IP 地址,因此如果您想要允许地址为 172.17.0.21 的容器并且您希望它能够 仅 访问地址8.8.8.8,你可以这样做:
iptables -A FORWARD -s 172.17.0.21 -d 8.8.8.8 -j ACCEPT
iptables -A FORWARD -s 172.17.0.21 -j REJECT --reject-with icmp-host-prohibited
也可以使用 nsenter
命令在 非特权容器中修改 iptables 规则 。例如,如果您启动一个 Docker 容器:
docker run --name example -d myimage
您可以像这样获取该容器的 PID:
pid=$(docker inspect -f '{{.State.Pid}}' example)
然后在该容器的网络命名空间内使用 nsenter
到 运行 命令:
nsenter -t $pid -n iptables ...
这些命令将运行没有容器内命令运行的能力限制。