support hosts without /etc/hosts
Fixes: #12667 Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
This commit is contained in:
parent
d2fcfef8b0
commit
04dbbd96b6
|
|
@ -1735,11 +1735,9 @@ func (c *Container) makeBindMounts() error {
|
|||
}
|
||||
|
||||
if !c.config.UseImageHosts {
|
||||
newHosts, err := c.generateHosts("/etc/hosts")
|
||||
if err != nil {
|
||||
if err := c.updateHosts("/etc/hosts"); err != nil {
|
||||
return errors.Wrapf(err, "error creating hosts file for container %s", c.ID())
|
||||
}
|
||||
c.state.BindMounts["/etc/hosts"] = newHosts
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1756,11 +1754,9 @@ func (c *Container) makeBindMounts() error {
|
|||
}
|
||||
} else {
|
||||
if !c.config.UseImageHosts && c.state.BindMounts["/etc/hosts"] == "" {
|
||||
newHosts, err := c.generateHosts("/etc/hosts")
|
||||
if err != nil {
|
||||
if err := c.updateHosts("/etc/hosts"); err != nil {
|
||||
return errors.Wrapf(err, "error creating hosts file for container %s", c.ID())
|
||||
}
|
||||
c.state.BindMounts["/etc/hosts"] = newHosts
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2048,18 +2044,29 @@ func (c *Container) generateResolvConf() (string, error) {
|
|||
return destPath, nil
|
||||
}
|
||||
|
||||
// generateHosts creates a containers hosts file
|
||||
func (c *Container) generateHosts(path string) (string, error) {
|
||||
// updateHosts updates the container's hosts file
|
||||
func (c *Container) updateHosts(path string) error {
|
||||
var hosts string
|
||||
|
||||
orig, err := ioutil.ReadFile(path)
|
||||
if err != nil {
|
||||
return "", err
|
||||
// Ignore if the path does not exist
|
||||
if !os.IsNotExist(err) {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
hosts = string(orig)
|
||||
}
|
||||
hosts := string(orig)
|
||||
hosts += c.getHosts()
|
||||
|
||||
hosts += c.getHosts()
|
||||
hosts = c.appendLocalhost(hosts)
|
||||
|
||||
return c.writeStringToRundir("hosts", hosts)
|
||||
newHosts, err := c.writeStringToRundir("hosts", hosts)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.state.BindMounts["/etc/hosts"] = newHosts
|
||||
return nil
|
||||
}
|
||||
|
||||
// based on networking mode we may want to append the localhost
|
||||
|
|
|
|||
|
|
@ -756,4 +756,14 @@ EOF
|
|||
is "$output" ".*TERM=abc" "missing TERM environment variable despite TERM being set on commandline"
|
||||
}
|
||||
|
||||
@test "podman run - no /etc/hosts" {
|
||||
skip_if_rootless "cannot move /etc/hosts file as a rootless user"
|
||||
tmpfile=$PODMAN_TMPDIR/hosts
|
||||
mv /etc/hosts $tmpfile
|
||||
run_podman '?' run --rm --add-host "foo.com:1.2.3.4" $IMAGE cat "/etc/hosts"
|
||||
mv $tmpfile /etc/hosts
|
||||
is "$status" 0 "podman run without /etc/hosts file should work"
|
||||
is "$output" "1.2.3.4 foo.com.*" "users can add hosts even without /etc/hosts"
|
||||
}
|
||||
|
||||
# vim: filetype=sh
|
||||
|
|
|
|||
Loading…
Reference in New Issue