我想禁用由docker容器启动到外部世界的所有传出连接。我可以在Linux中通过向linux中的FORWARD链添加规则来实现这一点。我如何在Docker for Mac中执行此操作?
我发现Docker for Mac使用的是xhyve vm,这就是docker0接口所在的位置。这个连接到主机的接口是什么?我在Mac上使用nettop,我看到Docker使用我的en0无线接口。但是,我不确定Docker和xhyve是否使用相同的界面。
编辑:添加了docker-for-windows标记,因为它们可能有类似的解决方案(Hoping)
答案 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 退出屏幕会话,否则您将终止该终端。
对于easy but€选项,请使用Little Snitch并阻止来自com.docker.supervisor via vpnkit
的OSX上的出站连接。