我在这里有一个linuxkit构建的VM,其中包含我要运行的自定义容器service
。
services:
...
- name: net-manager
image: aemengo/net-manager:6bcc223a83e8a303a004bc6f6e383a54a3d19c55-amd64
net: host
capabilities:
- all
binds:
- /usr/bin/vpnkit-expose-port:/usr/bin/vpnkit-expose-port # userland proxy
- /usr/bin/vpnkit-iptables-wrapper:/usr/bin/iptables # iptables wrapper
- /var/vpnkit:/port # vpnkit control 9p mount
- /var/run:/var/run
command:
- sleep
- 1d
使用Alpine的基本映像,net-manager
服务的重点是允许公共互联网连接到我正在host: net
命名空间上旋转的虚拟以太网适配器。我当前的尝试是在容器内进行以下操作:
$ sysctl net.ipv4.conf.all.forwarding=1
$ /usr/bin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
就像您要对未使用vpnkit的VM进行处理一样,但是这样做似乎没有任何明显的效果。例如,nc -v google.com
仍然失败。我想念什么?如以下示例所示,安装并转发了vpnkit:
https://github.com/linuxkit/linuxkit/blob/master/examples/docker-for-mac.yml
答案 0 :(得分:1)
事实证明,问题出在这里:
binds:
...
/usr/bin/vpnkit-iptables-wrapper:/usr/bin/iptables
通过将iptables可执行文件替换为docker提供的可执行文件,即使命令报告没有问题,事情也表现不正常。正如他们的文档中提到的那样,它必须用于特定的群体。
解决方法是删除该绑定并运行容器中提供的iptables