From 7d95d300abd9d9cc811713e53fd41adec66f2e00 Mon Sep 17 00:00:00 2001 From: Zilin Du Date: Tue, 8 Oct 2013 14:29:22 -0700 Subject: [PATCH] replace 127.0.0.1 by the assigned IP address in the container's /etc/hosts file. --- container.go | 28 ++++++++++++++++++++++++++++ runtime.go | 27 +-------------------------- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/container.go b/container.go index 316e0d259..c6317c087 100644 --- a/container.go +++ b/container.go @@ -579,10 +579,12 @@ func (container *Container) Start(hostConfig *HostConfig) error { } if container.runtime.networkManager.disabled { container.Config.NetworkDisabled = true + container.buildHostnameAndHostsFiles("127.0.0.1") } else { if err := container.allocateNetwork(); err != nil { return err } + container.buildHostnameAndHostsFiles(container.NetworkSettings.IPAddress) } // Make sure the config is compatible with the current kernel @@ -868,6 +870,32 @@ func (container *Container) StderrPipe() (io.ReadCloser, error) { return utils.NewBufReader(reader), nil } +func (container *Container) buildHostnameAndHostsFiles(IP string) { + container.HostnamePath = path.Join(container.root, "hostname") + ioutil.WriteFile(container.HostnamePath, []byte(container.Config.Hostname+"\n"), 0644) + + hostsContent := []byte(` +127.0.0.1 localhost +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +ff00::0 ip6-mcastprefix +ff02::1 ip6-allnodes +ff02::2 ip6-allrouters +`) + + container.HostsPath = path.Join(container.root, "hosts") + + if container.Config.Domainname != "" { + hostsContent = append([]byte(fmt.Sprintf("::1\t\t%s.%s %s\n", container.Config.Hostname, container.Config.Domainname, container.Config.Hostname)), hostsContent...) + hostsContent = append([]byte(fmt.Sprintf("%s\t%s.%s %s\n", IP, container.Config.Hostname, container.Config.Domainname, container.Config.Hostname)), hostsContent...) + } else { + hostsContent = append([]byte(fmt.Sprintf("::1\t\t%s\n", container.Config.Hostname)), hostsContent...) + hostsContent = append([]byte(fmt.Sprintf("%s\t%s\n", IP, container.Config.Hostname)), hostsContent...) + } + + ioutil.WriteFile(container.HostsPath, hostsContent, 0644) +} + func (container *Container) allocateNetwork() error { if container.Config.NetworkDisabled { return nil diff --git a/runtime.go b/runtime.go index d77ecca72..e4bca0457 100644 --- a/runtime.go +++ b/runtime.go @@ -368,32 +368,7 @@ func (runtime *Runtime) Create(config *Config) (*Container, error) { return nil, err } - // Step 3: if hostname, build hostname and hosts files - container.HostnamePath = path.Join(container.root, "hostname") - ioutil.WriteFile(container.HostnamePath, []byte(container.Config.Hostname+"\n"), 0644) - - hostsContent := []byte(` -127.0.0.1 localhost -::1 localhost ip6-localhost ip6-loopback -fe00::0 ip6-localnet -ff00::0 ip6-mcastprefix -ff02::1 ip6-allnodes -ff02::2 ip6-allrouters -`) - - container.HostsPath = path.Join(container.root, "hosts") - - if container.Config.Domainname != "" { - hostsContent = append([]byte(fmt.Sprintf("::1\t\t%s.%s %s\n", container.Config.Hostname, container.Config.Domainname, container.Config.Hostname)), hostsContent...) - hostsContent = append([]byte(fmt.Sprintf("127.0.0.1\t%s.%s %s\n", container.Config.Hostname, container.Config.Domainname, container.Config.Hostname)), hostsContent...) - } else { - hostsContent = append([]byte(fmt.Sprintf("::1\t\t%s\n", container.Config.Hostname)), hostsContent...) - hostsContent = append([]byte(fmt.Sprintf("127.0.0.1\t%s\n", container.Config.Hostname)), hostsContent...) - } - - ioutil.WriteFile(container.HostsPath, hostsContent, 0644) - - // Step 4: register the container + // Step 3: register the container if err := runtime.Register(container); err != nil { return nil, err }