|
@@ -4,6 +4,7 @@ import (
|
|
"encoding/json"
|
|
"encoding/json"
|
|
"flag"
|
|
"flag"
|
|
"fmt"
|
|
"fmt"
|
|
|
|
+ "github.com/dotcloud/docker/mount"
|
|
"github.com/dotcloud/docker/pkg/netlink"
|
|
"github.com/dotcloud/docker/pkg/netlink"
|
|
"github.com/dotcloud/docker/utils"
|
|
"github.com/dotcloud/docker/utils"
|
|
"github.com/syndtr/gocapability/capability"
|
|
"github.com/syndtr/gocapability/capability"
|
|
@@ -26,6 +27,7 @@ type DockerInitArgs struct {
|
|
env []string
|
|
env []string
|
|
args []string
|
|
args []string
|
|
mtu int
|
|
mtu int
|
|
|
|
+ driver string
|
|
}
|
|
}
|
|
|
|
|
|
func setupHostname(args *DockerInitArgs) error {
|
|
func setupHostname(args *DockerInitArgs) error {
|
|
@@ -92,6 +94,10 @@ func setupWorkingDirectory(args *DockerInitArgs) error {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func setupMounts(args *DockerInitArgs) error {
|
|
|
|
+ return mount.ForceMount("proc", "proc", "proc", "")
|
|
|
|
+}
|
|
|
|
+
|
|
// Takes care of dropping privileges to the desired user
|
|
// Takes care of dropping privileges to the desired user
|
|
func changeUser(args *DockerInitArgs) error {
|
|
func changeUser(args *DockerInitArgs) error {
|
|
if args.user == "" {
|
|
if args.user == "" {
|
|
@@ -182,7 +188,7 @@ func getEnv(args *DockerInitArgs, key string) string {
|
|
func executeProgram(args *DockerInitArgs) error {
|
|
func executeProgram(args *DockerInitArgs) error {
|
|
setupEnv(args)
|
|
setupEnv(args)
|
|
|
|
|
|
- if false {
|
|
|
|
|
|
+ if args.driver == "lxc" {
|
|
if err := setupHostname(args); err != nil {
|
|
if err := setupHostname(args); err != nil {
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
@@ -201,6 +207,12 @@ func executeProgram(args *DockerInitArgs) error {
|
|
if err := changeUser(args); err != nil {
|
|
if err := changeUser(args); err != nil {
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
|
|
+ } else if args.driver == "chroot" {
|
|
|
|
+ // TODO: @crosbymichael @creack how do we unmount this after the
|
|
|
|
+ // process exists?
|
|
|
|
+ if err := setupMounts(args); err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
path, err := exec.LookPath(args.args[0])
|
|
path, err := exec.LookPath(args.args[0])
|
|
@@ -233,6 +245,7 @@ func SysInit() {
|
|
workDir := flag.String("w", "", "workdir")
|
|
workDir := flag.String("w", "", "workdir")
|
|
privileged := flag.Bool("privileged", false, "privileged mode")
|
|
privileged := flag.Bool("privileged", false, "privileged mode")
|
|
mtu := flag.Int("mtu", 1500, "interface mtu")
|
|
mtu := flag.Int("mtu", 1500, "interface mtu")
|
|
|
|
+ driver := flag.String("driver", "", "exec driver")
|
|
flag.Parse()
|
|
flag.Parse()
|
|
|
|
|
|
// Get env
|
|
// Get env
|
|
@@ -257,6 +270,7 @@ func SysInit() {
|
|
env: env,
|
|
env: env,
|
|
args: flag.Args(),
|
|
args: flag.Args(),
|
|
mtu: *mtu,
|
|
mtu: *mtu,
|
|
|
|
+ driver: *driver,
|
|
}
|
|
}
|
|
|
|
|
|
if err := executeProgram(args); err != nil {
|
|
if err := executeProgram(args); err != nil {
|