1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Allow use to set his own dns via -dns

This commit is contained in:
Guillaume J. Charmes 2013-04-10 19:02:23 -07:00
parent 1f9f5eed5d
commit 7673afc843
2 changed files with 24 additions and 4 deletions

View file

@ -62,6 +62,7 @@ type Config struct {
StdinOnce bool // If true, close stdin after the 1 attached client disconnects. StdinOnce bool // If true, close stdin after the 1 attached client disconnects.
Env []string Env []string
Cmd []string Cmd []string
Dns []string
Image string // Name of the image as it was passed by the operator (eg. could be symbolic) Image string // Name of the image as it was passed by the operator (eg. could be symbolic)
} }
@ -86,6 +87,9 @@ func ParseRun(args []string, stdout io.Writer) (*Config, error) {
var flEnv ListOpts var flEnv ListOpts
cmd.Var(&flEnv, "e", "Set environment variables") cmd.Var(&flEnv, "e", "Set environment variables")
var flDns ListOpts
cmd.Var(&flDns, "dns", "Set custom dns servers")
if err := cmd.Parse(args); err != nil { if err := cmd.Parse(args); err != nil {
return nil, err return nil, err
} }
@ -123,6 +127,7 @@ func ParseRun(args []string, stdout io.Writer) (*Config, error) {
AttachStderr: flAttach.Get("stderr"), AttachStderr: flAttach.Get("stderr"),
Env: flEnv, Env: flEnv,
Cmd: runCmd, Cmd: runCmd,
Dns: flDns,
Image: image, Image: image,
} }
// When allocating stdin in attached mode, close stdin at client disconnect // When allocating stdin in attached mode, close stdin at client disconnect

View file

@ -83,8 +83,6 @@ func (runtime *Runtime) Create(config *Config) (*Container, error) {
config.Hostname = id[:12] config.Hostname = id[:12]
} }
resolvConfPath := "/etc/resolv.conf"
container := &Container{ container := &Container{
// FIXME: we should generate the ID here instead of receiving it as an argument // FIXME: we should generate the ID here instead of receiving it as an argument
Id: id, Id: id,
@ -96,7 +94,6 @@ func (runtime *Runtime) Create(config *Config) (*Container, error) {
NetworkSettings: &NetworkSettings{}, NetworkSettings: &NetworkSettings{},
// FIXME: do we need to store this in the container? // FIXME: do we need to store this in the container?
SysInitPath: sysInitPath, SysInitPath: sysInitPath,
ResolvConfPath: resolvConfPath,
} }
container.root = runtime.containerRoot(container.Id) container.root = runtime.containerRoot(container.Id)
// Step 1: create the container directory. // Step 1: create the container directory.
@ -104,6 +101,24 @@ func (runtime *Runtime) Create(config *Config) (*Container, error) {
if err := os.Mkdir(container.root, 0700); err != nil { if err := os.Mkdir(container.root, 0700); err != nil {
return nil, err return nil, err
} }
// If custom dns exists, then create a resolv.conf for the container
if len(config.Dns) > 0 {
container.ResolvConfPath = path.Join(container.root, "resolv.conf")
f, err := os.Create(container.ResolvConfPath)
if err != nil {
return nil, err
}
defer f.Close()
for _, dns := range config.Dns {
if _, err := f.Write([]byte("nameserver " + dns + "\n")); err != nil {
return nil, err
}
}
} else {
container.ResolvConfPath = "/etc/resolv.conf"
}
// Step 2: save the container json // Step 2: save the container json
if err := container.ToDisk(); err != nil { if err := container.ToDisk(); err != nil {
return nil, err return nil, err