|
@@ -297,6 +297,9 @@ func (container *Container) Start() (err error) {
|
|
if err := container.initializeNetworking(); err != nil {
|
|
if err := container.initializeNetworking(); err != nil {
|
|
return err
|
|
return err
|
|
}
|
|
}
|
|
|
|
+ if err := container.updateParentsHosts(); err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
container.verifyDaemonSettings()
|
|
container.verifyDaemonSettings()
|
|
if err := prepareVolumesForContainer(container); err != nil {
|
|
if err := prepareVolumesForContainer(container); err != nil {
|
|
return err
|
|
return err
|
|
@@ -390,10 +393,7 @@ func (container *Container) buildHostnameFile() error {
|
|
return ioutil.WriteFile(container.HostnamePath, []byte(container.Config.Hostname+"\n"), 0644)
|
|
return ioutil.WriteFile(container.HostnamePath, []byte(container.Config.Hostname+"\n"), 0644)
|
|
}
|
|
}
|
|
|
|
|
|
-func (container *Container) buildHostnameAndHostsFiles(IP string) error {
|
|
|
|
- if err := container.buildHostnameFile(); err != nil {
|
|
|
|
- return err
|
|
|
|
- }
|
|
|
|
|
|
+func (container *Container) buildHostsFiles(IP string) error {
|
|
|
|
|
|
hostsPath, err := container.getRootResourcePath("hosts")
|
|
hostsPath, err := container.getRootResourcePath("hosts")
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -416,6 +416,14 @@ func (container *Container) buildHostnameAndHostsFiles(IP string) error {
|
|
return etchosts.Build(container.HostsPath, IP, container.Config.Hostname, container.Config.Domainname, &extraContent)
|
|
return etchosts.Build(container.HostsPath, IP, container.Config.Hostname, container.Config.Domainname, &extraContent)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func (container *Container) buildHostnameAndHostsFiles(IP string) error {
|
|
|
|
+ if err := container.buildHostnameFile(); err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return container.buildHostsFiles(IP)
|
|
|
|
+}
|
|
|
|
+
|
|
func (container *Container) allocateNetwork() error {
|
|
func (container *Container) allocateNetwork() error {
|
|
mode := container.hostConfig.NetworkMode
|
|
mode := container.hostConfig.NetworkMode
|
|
if container.Config.NetworkDisabled || mode.IsContainer() || mode.IsHost() {
|
|
if container.Config.NetworkDisabled || mode.IsContainer() || mode.IsHost() {
|
|
@@ -878,6 +886,26 @@ func (container *Container) setupContainerDns() error {
|
|
return ioutil.WriteFile(container.ResolvConfPath, resolvConf, 0644)
|
|
return ioutil.WriteFile(container.ResolvConfPath, resolvConf, 0644)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func (container *Container) updateParentsHosts() error {
|
|
|
|
+ parents, err := container.daemon.Parents(container.Name)
|
|
|
|
+ if err != nil {
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ for _, cid := range parents {
|
|
|
|
+ if cid == "0" {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ c := container.daemon.Get(cid)
|
|
|
|
+ if c != nil && !container.daemon.config.DisableNetwork && !container.hostConfig.NetworkMode.IsContainer() && !container.hostConfig.NetworkMode.IsHost() {
|
|
|
|
+ if err := etchosts.Update(c.HostsPath, container.NetworkSettings.IPAddress, container.Name[1:]); err != nil {
|
|
|
|
+ return fmt.Errorf("Failed to update /etc/hosts in parent container: %v", err)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return nil
|
|
|
|
+}
|
|
|
|
+
|
|
func (container *Container) initializeNetworking() error {
|
|
func (container *Container) initializeNetworking() error {
|
|
var err error
|
|
var err error
|
|
if container.hostConfig.NetworkMode.IsHost() {
|
|
if container.hostConfig.NetworkMode.IsHost() {
|