禁止从 Docker 上的 Docker 个容器出口 Mac
Disallow egress from Docker containers on Docker for Mac
我想禁用所有由 docker 容器发起的与外界的传出连接。我可以在 linux 中通过向 linux 中的 FORWARD 链添加规则来完成此操作。我如何在 Docker 中为 Mac 执行此操作?
我发现 Docker for Mac 使用 xhyve 虚拟机,这就是 docker0 接口所在的位置。这连接到主机中的哪个接口?我在 Mac 上使用 nettop,我看到 Docker 使用我的 en0 无线接口。但是,我不确定 Docker 和 xhyve 是否使用相同的界面。
编辑:添加了 docker-for-windows 标签,因为他们可能有类似的解决方案(希望)
编辑 2:Mac 的 Docker 已更改,因此接受的解决方案略有更改
试试Mac的pfctl
命令,它有点等同于iptables。
这是手册页:https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man8/pfctl.8.html
Docker
$ docker run --net=host --privileged -ti alpine sh
# apk update && apk add iptables
# iptables -vnL
这个和规则可以变成 Dockerfile
和 运行 带有 -- restart
选项。我认为 on-failure
可能会在 Docker for Mac 启动时重新应用规则。
虚拟 Mac网络
要访问 linux 虚拟机:
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
请注意,Mac 的 Docker 重启后规则将消失。我还没有找到持久系统更改的秘密武器。
使用ctrl-a然后d退出屏幕会话否则你会很无聊终点站。
OSX
对于 easy but € 选项,使用 Little Snitch 并阻止来自 com.docker.supervisor via vpnkit
的 OSX 上的出站连接。
我想禁用所有由 docker 容器发起的与外界的传出连接。我可以在 linux 中通过向 linux 中的 FORWARD 链添加规则来完成此操作。我如何在 Docker 中为 Mac 执行此操作?
我发现 Docker for Mac 使用 xhyve 虚拟机,这就是 docker0 接口所在的位置。这连接到主机中的哪个接口?我在 Mac 上使用 nettop,我看到 Docker 使用我的 en0 无线接口。但是,我不确定 Docker 和 xhyve 是否使用相同的界面。
编辑:添加了 docker-for-windows 标签,因为他们可能有类似的解决方案(希望)
编辑 2:Mac 的 Docker 已更改,因此接受的解决方案略有更改
试试Mac的pfctl
命令,它有点等同于iptables。
这是手册页:https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man8/pfctl.8.html
Docker
$ docker run --net=host --privileged -ti alpine sh
# apk update && apk add iptables
# iptables -vnL
这个和规则可以变成 Dockerfile
和 运行 带有 -- restart
选项。我认为 on-failure
可能会在 Docker for Mac 启动时重新应用规则。
虚拟 Mac网络
要访问 linux 虚拟机:
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
请注意,Mac 的 Docker 重启后规则将消失。我还没有找到持久系统更改的秘密武器。
使用ctrl-a然后d退出屏幕会话否则你会很无聊终点站。
OSX
对于 easy but € 选项,使用 Little Snitch 并阻止来自 com.docker.supervisor via vpnkit
的 OSX 上的出站连接。