答案1
這對於標準網路命令來說是不可能的。幾年前,Docker 明確拒絕了讓這一切變得簡單的功能(https://github.com/moby/moby/pull/8216)。
當然,您可以手動將介面移至 Docker 容器的網路命名空間中,但這充滿了問題:例如,每次重新啟動或重新建立容器時,您都必須重新配置網路。
若要將介面新增至容器的網路命名空間:
取得容器的 PID:
container_pid=$(docker inspect <container_name_or_id> -f '{{ .State.Pid }}')將介面分配給容器的命名空間:
ip link set netns ${container_pid} dev ${device}
你已經完成了......大部分。
如果您想在將介面新增至命名空間後對其進行配置,則必須執行下列任一操作:
使用額外的權限來運行您的容器。可能只是,儘管您也可以在測試時
--cap-add=NET_ADMIN使用。--privileged用於
nsenter從容器外部執行配置:nsenter -t ${container_pid} -n ip addr ...
雖然這一切都有效,但由於我注意到的限制,macvtap如果我出於某種原因需要容器內的物理接口,我會堅持使用驅動程式。或使用lxc或systemd-nspawn或其他一些容器化工具來使此特定任務變得更容易。


