linuxkit: add -vpnkit-socket flag

Add a new flag to set the VPNKit ethernet socket path. Defaults to the
standard location for the socket in Docker for Mac.

This flag can be used to connect to the VPNKit instance started by
another linuxkit VM launched with `-start-vpnkit`. VMs connected to the
same VPNKit instance will be on the same virtual internal network.

Signed-off-by: Magnus Skjegstad <magnus@skjegstad.com>
This commit is contained in:
Magnus Skjegstad 2017-05-26 12:36:40 +02:00
parent df141841c5
commit 938091c9fb

View File

@ -35,6 +35,8 @@ func runHyperKit(args []string) {
state := flags.String("state", "", "Path to directory to keep VM state in") state := flags.String("state", "", "Path to directory to keep VM state in")
vsockports := flags.String("vsock-ports", "", "List of vsock ports to forward from the guest on startup (comma separated). A unix domain socket for each port will be created in the state directory") vsockports := flags.String("vsock-ports", "", "List of vsock ports to forward from the guest on startup (comma separated). A unix domain socket for each port will be created in the state directory")
startVPNKit := flags.Bool("start-vpnkit", false, "Launch a new VPNKit instead of reusing the instance from Docker for Mac. The new instance will be on a separate internal network. This enables IP port forwarding from the host to the guest if the guest supports it.") startVPNKit := flags.Bool("start-vpnkit", false, "Launch a new VPNKit instead of reusing the instance from Docker for Mac. The new instance will be on a separate internal network. This enables IP port forwarding from the host to the guest if the guest supports it.")
vpnKitDefaultSocket := filepath.Join(os.Getenv("HOME"), "Library/Containers/com.docker.docker/Data/s50")
vpnKitEthernetSocket := flags.String("vpnkit-socket", vpnKitDefaultSocket, "Path to VPNKit ethernet socket. The Docker for Mac socket is used by default. Overridden if -start-vpnkit is set.")
if err := flags.Parse(args); err != nil { if err := flags.Parse(args); err != nil {
log.Fatal("Unable to parse args") log.Fatal("Unable to parse args")
@ -103,16 +105,15 @@ func runHyperKit(args []string) {
*disk = filepath.Join(*state, "disk.img") *disk = filepath.Join(*state, "disk.img")
} }
vpnKitEthernetSocket := "auto"
var vpnKitPortSocket string var vpnKitPortSocket string
var vpnKitProcess *os.Process var vpnKitProcess *os.Process
// Launch new VPNKit if needed // Launch new VPNKit if needed
if *startVPNKit { if *startVPNKit {
vpnKitEthernetSocket = filepath.Join(*state, "vpnkit_eth.sock") *vpnKitEthernetSocket = filepath.Join(*state, "vpnkit_eth.sock")
vpnKitPortSocket = filepath.Join(*state, "vpnkit_port.sock") vpnKitPortSocket = filepath.Join(*state, "vpnkit_port.sock")
vsockSocket := filepath.Join(*state, "connect") vsockSocket := filepath.Join(*state, "connect")
vpnKitProcess, err = launchVPNKit(vpnKitEthernetSocket, vsockSocket, vpnKitPortSocket) vpnKitProcess, err = launchVPNKit(*vpnKitEthernetSocket, vsockSocket, vpnKitPortSocket)
if err != nil { if err != nil {
log.Fatalln("Unable to start vpnkit: ", err) log.Fatalln("Unable to start vpnkit: ", err)
} }
@ -126,7 +127,7 @@ func runHyperKit(args []string) {
}() }()
} }
h, err := hyperkit.New(*hyperkitPath, vpnKitEthernetSocket, *state) h, err := hyperkit.New(*hyperkitPath, *vpnKitEthernetSocket, *state)
if err != nil { if err != nil {
log.Fatalln("Error creating hyperkit: ", err) log.Fatalln("Error creating hyperkit: ", err)
} }