2

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

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

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

编辑 2: Docker for Mac 发生了变化,因此接受的解决方案发生了一些变化

4

2 回答 2

2

码头工人

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

这和规则可以变成一个Dockerfile并使用一个-- restart选项运行。我认为on-failure当 Docker for Mac 启动时重新应用规则可能会起作用。

虚拟机

要访问 linux VM:

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

自从迁移到linuxkit 之后,这不是您的普通 linux 主机,一切都是容器:

linuxkit:~# ctr -n services.linuxkit 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(或docker)命名空间

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

请注意,重新启动 Docker for Mac 后,规则将消失。我还没有找到持久系统更改的秘诀。

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

操作系统

对于简单但简单的选项,请使用Little Snitch并阻止 OSX 上的出站连接com.docker.supervisor via vpnkit

于 2018-03-22T05:08:37.733 回答
1

试试 Mac 的pfctl命令,它有点相当于 iptables。

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

于 2018-03-22T02:27:18.777 回答