@@ -2,7 +2,6 @@ package daemon
22
33import (
44 "io"
5- "runtime"
65
76 "github.com/docker/distribution/reference"
87 "github.com/docker/docker/api/types"
@@ -24,6 +23,7 @@ type releaseableLayer struct {
2423 layerStore layer.Store
2524 roLayer layer.Layer
2625 rwLayer layer.RWLayer
26+ os string
2727}
2828
2929func (rl * releaseableLayer ) Mount () (containerfs.ContainerFS , error ) {
@@ -35,7 +35,7 @@ func (rl *releaseableLayer) Mount() (containerfs.ContainerFS, error) {
3535 }
3636
3737 mountID := stringid .GenerateRandomID ()
38- rl .rwLayer , err = rl .layerStore .CreateRWLayer (mountID , chainID , nil )
38+ rl .rwLayer , err = rl .layerStore .CreateRWLayer (mountID , chainID , rl . os , nil )
3939 if err != nil {
4040 return nil , errors .Wrap (err , "failed to create rwlayer" )
4141 }
@@ -67,12 +67,12 @@ func (rl *releaseableLayer) Commit(os string) (builder.ReleaseableLayer, error)
6767 }
6868 defer stream .Close ()
6969
70- newLayer , err := rl .layerStore .Register (stream , chainID , layer . OS ( os ) )
70+ newLayer , err := rl .layerStore .Register (stream , chainID , os )
7171 if err != nil {
7272 return nil , err
7373 }
74- // TODO: An optimization would be to handle empty layers before returning
75- return & releaseableLayer {layerStore : rl .layerStore , roLayer : newLayer }, nil
74+ // TODO: An optimization woudld be to handle empty layers before returning
75+ return & releaseableLayer {layerStore : rl .layerStore , roLayer : newLayer , os : os }, nil
7676}
7777
7878func (rl * releaseableLayer ) DiffID () layer.DiffID {
@@ -128,21 +128,21 @@ func (rl *releaseableLayer) releaseROLayer() error {
128128 return err
129129}
130130
131- func newReleasableLayerForImage (img * image.Image , layerStore layer.Store ) (builder.ReleaseableLayer , error ) {
131+ func newReleasableLayerForImage (img * image.Image , layerStore layer.Store , os string ) (builder.ReleaseableLayer , error ) {
132132 if img == nil || img .RootFS .ChainID () == "" {
133- return & releaseableLayer {layerStore : layerStore }, nil
133+ return & releaseableLayer {layerStore : layerStore , os : os }, nil
134134 }
135135 // Hold a reference to the image layer so that it can't be removed before
136136 // it is released
137137 roLayer , err := layerStore .Get (img .RootFS .ChainID ())
138138 if err != nil {
139139 return nil , errors .Wrapf (err , "failed to get layer for image %s" , img .ImageID ())
140140 }
141- return & releaseableLayer {layerStore : layerStore , roLayer : roLayer }, nil
141+ return & releaseableLayer {layerStore : layerStore , roLayer : roLayer , os : os }, nil
142142}
143143
144144// TODO: could this use the regular daemon PullImage ?
145- func (daemon * Daemon ) pullForBuilder (ctx context.Context , name string , authConfigs map [string ]types.AuthConfig , output io.Writer , platform string ) (* image.Image , error ) {
145+ func (daemon * Daemon ) pullForBuilder (ctx context.Context , name string , authConfigs map [string ]types.AuthConfig , output io.Writer , os string ) (* image.Image , error ) {
146146 ref , err := reference .ParseNormalizedNamed (name )
147147 if err != nil {
148148 return nil , err
@@ -161,7 +161,7 @@ func (daemon *Daemon) pullForBuilder(ctx context.Context, name string, authConfi
161161 pullRegistryAuth = & resolvedConfig
162162 }
163163
164- if err := daemon .pullImageWithReference (ctx , ref , platform , nil , pullRegistryAuth , output ); err != nil {
164+ if err := daemon .pullImageWithReference (ctx , ref , os , nil , pullRegistryAuth , output ); err != nil {
165165 return nil , err
166166 }
167167 return daemon .GetImage (name )
@@ -172,7 +172,7 @@ func (daemon *Daemon) pullForBuilder(ctx context.Context, name string, authConfi
172172// leaking of layers.
173173func (daemon * Daemon ) GetImageAndReleasableLayer (ctx context.Context , refOrID string , opts backend.GetImageAndLayerOptions ) (builder.Image , builder.ReleaseableLayer , error ) {
174174 if refOrID == "" {
175- layer , err := newReleasableLayerForImage (nil , daemon .stores [ opts .OS ]. layerStore )
175+ layer , err := newReleasableLayerForImage (nil , daemon .layerStore , opts .OS )
176176 return nil , layer , err
177177 }
178178
@@ -183,7 +183,7 @@ func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID st
183183 }
184184 // TODO: shouldn't we error out if error is different from "not found" ?
185185 if image != nil {
186- layer , err := newReleasableLayerForImage (image , daemon .stores [ opts . OS ]. layerStore )
186+ layer , err := newReleasableLayerForImage (image , daemon .layerStore , image . OperatingSystem () )
187187 return image , layer , err
188188 }
189189 }
@@ -192,29 +192,26 @@ func (daemon *Daemon) GetImageAndReleasableLayer(ctx context.Context, refOrID st
192192 if err != nil {
193193 return nil , nil , err
194194 }
195- layer , err := newReleasableLayerForImage (image , daemon .stores [ opts . OS ]. layerStore )
195+ layer , err := newReleasableLayerForImage (image , daemon .layerStore , image . OperatingSystem () )
196196 return image , layer , err
197197}
198198
199199// CreateImage creates a new image by adding a config and ID to the image store.
200200// This is similar to LoadImage() except that it receives JSON encoded bytes of
201201// an image instead of a tar archive.
202- func (daemon * Daemon ) CreateImage (config []byte , parent string , platform string ) (builder.Image , error ) {
203- if platform == "" {
204- platform = runtime .GOOS
205- }
206- id , err := daemon .stores [platform ].imageStore .Create (config )
202+ func (daemon * Daemon ) CreateImage (config []byte , parent string ) (builder.Image , error ) {
203+ id , err := daemon .imageStore .Create (config )
207204 if err != nil {
208205 return nil , errors .Wrapf (err , "failed to create image" )
209206 }
210207
211208 if parent != "" {
212- if err := daemon .stores [ platform ]. imageStore .SetParent (id , image .ID (parent )); err != nil {
209+ if err := daemon .imageStore .SetParent (id , image .ID (parent )); err != nil {
213210 return nil , errors .Wrapf (err , "failed to set parent %s" , parent )
214211 }
215212 }
216213
217- return daemon .stores [ platform ]. imageStore .Get (id )
214+ return daemon .imageStore .Get (id )
218215}
219216
220217// IDMappings returns uid/gid mappings for the builder
0 commit comments