diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2021-01-13 09:58:09 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-13 09:58:09 -0500 |
commit | 99c5746150799d6cfe3ea612d3c88c6b904f9312 (patch) | |
tree | fe856f549b38f0ca55f7c2dd8b8640e4b0a22214 /libpod | |
parent | 183f443a585a3659d807ee413e5b708d37a72924 (diff) | |
parent | 0cff5ad0a30cf7de1d4c23ca56a5670c7e2f1192 (diff) | |
download | podman-99c5746150799d6cfe3ea612d3c88c6b904f9312.tar.gz podman-99c5746150799d6cfe3ea612d3c88c6b904f9312.tar.bz2 podman-99c5746150799d6cfe3ea612d3c88c6b904f9312.zip |
Merge pull request #8958 from zhangguanzhang/duplicated-hosts
Fixes /etc/hosts duplicated every time after container restarted in a pod
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/container_internal.go | 17 | ||||
-rw-r--r-- | libpod/container_internal_linux.go | 2 |
2 files changed, 15 insertions, 4 deletions
diff --git a/libpod/container_internal.go b/libpod/container_internal.go index c7548e0e5..f4cdb749f 100644 --- a/libpod/container_internal.go +++ b/libpod/container_internal.go @@ -1,6 +1,7 @@ package libpod import ( + "bufio" "bytes" "context" "fmt" @@ -1865,16 +1866,26 @@ func (c *Container) writeStringToStaticDir(filename, contents string) (string, e return destFileName, nil } -// appendStringToRundir appends the provided string to the runtimedir file -func (c *Container) appendStringToRundir(destFile, output string) (string, error) { +// appendStringToRunDir appends the provided string to the runtimedir file +func (c *Container) appendStringToRunDir(destFile, output string) (string, error) { destFileName := filepath.Join(c.state.RunDir, destFile) - f, err := os.OpenFile(destFileName, os.O_APPEND|os.O_WRONLY, 0600) + f, err := os.OpenFile(destFileName, os.O_APPEND|os.O_RDWR, 0600) if err != nil { return "", err } defer f.Close() + compareStr := strings.TrimRight(output, "\n") + scanner := bufio.NewScanner(f) + scanner.Split(bufio.ScanLines) + + for scanner.Scan() { + if strings.Compare(scanner.Text(), compareStr) == 0 { + return filepath.Join(c.state.RunDir, destFile), nil + } + } + if _, err := f.WriteString(output); err != nil { return "", errors.Wrapf(err, "unable to write %s", destFileName) } diff --git a/libpod/container_internal_linux.go b/libpod/container_internal_linux.go index 575047f95..ce2b52234 100644 --- a/libpod/container_internal_linux.go +++ b/libpod/container_internal_linux.go @@ -1742,7 +1742,7 @@ func (c *Container) generateHosts(path string) (string, error) { // FIXME. Path should be used by this function,but I am not sure what is correct; remove //lint // once this is fixed func (c *Container) appendHosts(path string, netCtr *Container) (string, error) { //nolint - return c.appendStringToRundir("hosts", netCtr.getHosts()) + return c.appendStringToRunDir("hosts", netCtr.getHosts()) } // getHosts finds the pertinent information for a container's host file in its config and state |