diff --git a/docs/podman-run.1.md b/docs/podman-run.1.md index edd7ed681d..00085950bf 100644 --- a/docs/podman-run.1.md +++ b/docs/podman-run.1.md @@ -21,6 +21,14 @@ If the IMAGE is not already loaded then **podman run** will pull the IMAGE, and all image dependencies, from the repository in the same way running **podman pull** IMAGE, before it starts the container from that image. +Several files will be automatically created within the container. These include +`/etc/hosts`, `/etc/hostname`, and `/etc/resolv.conf` to manage networking. +These will be based on the host's version of the files, though they can be +customized with options (for example, **--dns** will override the host's DNS +servers in the created `resolv.conf`). Additionally, an empty file is created in +each container to indicate to programs they are running in a container. This file +is located at `/run/.containerenv`. + ## OPTIONS **--add-host**=[] Add a custom host-to-IP mapping (host:ip) diff --git a/libpod/container_internal.go b/libpod/container_internal.go index 2ee2174db8..9ab928780f 100644 --- a/libpod/container_internal.go +++ b/libpod/container_internal.go @@ -672,6 +672,17 @@ func (c *Container) makeBindMounts() error { c.state.BindMounts["/etc/hostname"] = hostnamePath } + // Make .containerenv + // Empty file, so no need to recreate if it exists + if _, ok := c.state.BindMounts["/run/.containerenv"]; !ok { + // Empty string for now, but we may consider populating this later + containerenvPath, err := c.writeStringToRundir(".containerenv", "") + if err != nil { + return errors.Wrapf(err, "error creating containerenv file for container %s", c.ID()) + } + c.state.BindMounts["/run/.containerenv"] = containerenvPath + } + return nil } @@ -898,6 +909,7 @@ func (c *Container) generateSpec() (*spec.Spec, error) { g.SetHostname(c.Hostname()) g.AddProcessEnv("HOSTNAME", g.Spec().Hostname) + g.AddProcessEnv("container", "libpod") return g.Spec(), nil }