在Docker for Mac上禁止从Docker容器中出口

时间:2018-03-22 01:28:09

标签: macos docker docker-for-windows docker-for-mac ipfw

我想禁用由docker容器启动到外部世界的所有传出连接。我可以在Linux中通过向linux中的FORWARD链添加规则来实现这一点。我如何在Docker for Mac中执行此操作?

我发现Docker for Mac使用的是xhyve vm,这就是docker0接口所在的位置。这个连接到主机的接口是什么?我在Mac上使用nettop,我看到Docker使用我的en0无线接口。但是,我不确定Docker和xhyve是否使用相同的界面。

编辑:添加了docker-for-windows标记,因为它们可能有类似的解决方案(Hoping)

2 个答案:

答案 0 :(得分:1)

尝试Mac的pfctl命令,它等同于iptables。

此处的手册页:https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man8/pfctl.8.html

答案 1 :(得分:1)

泊坞

$ docker run --net=host --privileged -ti alpine sh
# apk update && apk add iptables
# iptables -vnL

此规则和规则可以转换为Dockerfile并使用-- restart选项运行。我认为当Docker for Mac启动时,on-failure可能会重新应用这些规则。

虚拟机

要进入linux VM:

mac$ brew install screen
mac$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

自从迁移到linuxkit以来,这不是普通的linux主机,所有东西都是容器:

linuxkit:~# ctr tasks ls
TASK                    PID     STATUS    
acpid                   925     RUNNING
diagnose                967     RUNNING
host-timesync-daemon    1116    RUNNING
ntpd                    1248    RUNNING
vpnkit-forwarder        1350    RUNNING
docker-ce               1011    RUNNING
kubelet                 1198    RUNNING
trim-after-delete       1303    RUNNING
vsudd                   1398    RUNNING

使用runc进入docker-ce命名空间

linuxkit:~# runc --root /run/containerd/runc/default exec -t docker-ce /bin/sh
docker-ce # iptables -vnL

请注意,重启Docker for Mac后规则将消失。我还没有找到坚持系统变化的秘诀。

使用 ctrl - a 然后 d 退出屏幕会话,否则您将终止该终端。

OSX

对于easy but€选项,请使用Little Snitch并阻止来自com.docker.supervisor via vpnkit的OSX上的出站连接。