@@ -112,16 +112,21 @@ func (x *hostsStore) Acquire(meta Meta) (err error) {
112
112
return err
113
113
}
114
114
115
- if err = os .WriteFile (loc , []byte {}, 0o644 ); err != nil {
116
- return errors .Join (store .ErrSystemFailure , err )
117
- }
115
+ // See https://github.com/containerd/nerdctl/issues/3907
116
+ // Because of the way we call network manager ContainerNetworkingOpts then SetupNetworking in sequence
117
+ // we need to make sure we do not overwrite an already allocated hosts file.
118
+ if _ , err = os .Stat (loc ); os .IsNotExist (err ) {
119
+ if err = os .WriteFile (loc , []byte {}, 0o644 ); err != nil {
120
+ return errors .Join (store .ErrSystemFailure , err )
121
+ }
118
122
119
- // os.WriteFile relies on syscall.Open. Unless there are ACLs, the effective mode of the file will be matched
120
- // against the current process umask.
121
- // See https://www.man7.org/linux/man-pages/man2/open.2.html for details.
122
- // Since we must make sure that these files are world readable, explicitly chmod them here.
123
- if err = os .Chmod (loc , 0o644 ); err != nil {
124
- err = errors .Join (store .ErrSystemFailure , err )
123
+ // os.WriteFile relies on syscall.Open. Unless there are ACLs, the effective mode of the file will be matched
124
+ // against the current process umask.
125
+ // See https://www.man7.org/linux/man-pages/man2/open.2.html for details.
126
+ // Since we must make sure that these files are world readable, explicitly chmod them here.
127
+ if err = os .Chmod (loc , 0o644 ); err != nil {
128
+ err = errors .Join (store .ErrSystemFailure , err )
129
+ }
125
130
}
126
131
127
132
var content []byte
0 commit comments