@@ -19,13 +19,15 @@ class Docker:
1919 def __init__ (self , local_portage , overlay_dirs ):
2020 """Create a new container."""
2121
22- docker_image = options .OPTIONS .docker_image
22+ self .docker_client = docker .client .from_env ()
23+ self .docker_image_name = options .OPTIONS .docker_image
24+ self .docker_image = None
2325 repo_names = self ._get_repo_names (overlay_dirs )
2426 overlay_mountpoints = [os .path .join ("/var/lib/overlays" , r )
2527 for r in repo_names ]
2628
27- self ._setup_container (docker_image )
28- self ._create_container (docker_image , local_portage ,
29+ self ._setup_container ()
30+ self ._create_container (local_portage ,
2931 zip (overlay_dirs , overlay_mountpoints ))
3032 self ._start_container ()
3133 self ._set_profile ()
@@ -139,31 +141,38 @@ def _reader(self, proc, stream, name):
139141 (self .cid [:6 ], name , out .rstrip ()))
140142 options .log_ch .flush ()
141143
142- def _setup_container (self , docker_image ):
144+ def _setup_container (self ):
143145 """Setup the container."""
144146
145147 if options .OPTIONS .pull :
146- docker_args = options .OPTIONS .docker_command \
147- + ["pull" , docker_image ]
148- docker = subprocess .Popen (docker_args )
149- docker .wait ()
148+ options .log .info (f'pulling image { self .docker_image_name } ' )
149+ self .docker_image = self .docker_client \
150+ .images .pull (self .docker_image_name )
151+ else :
152+ self .docker_image = self .docker_client .images \
153+ .get (self .docker_image_name )
154+ options .log .debug ('image = %s' , self .docker_image )
150155
151- def _create_container (self , docker_image , local_portage , overlays ):
156+ def _create_container (self , local_portage , overlays ):
152157 """Create new container."""
153158
154- docker_args = options .OPTIONS .docker_command \
155- + ["create" ,
156- "--tty" ,
157- "--cap-add" , "CAP_SYS_ADMIN" ,
158- "--cap-add" , "CAP_MKNOD" ,
159- "--cap-add" , "CAP_NET_ADMIN" ,
159+ docker_args = {
160+ "--tty" : None ,
161+ "--cap-add" : [
162+ "CAP_SYS_ADMIN" ,
163+ "CAP_MKNOD" ,
164+ "CAP_NET_ADMIN" ,
165+ ],
160166 # https://github.com/moby/moby/issues/16429
161- "--security-opt" , "apparmor:unconfined" ,
162- "--device" , "/dev/fuse" ,
163- "--workdir" , "/root" ,
164- "--volume" , "%s:/var/db/repos/gentoo" % local_portage ,
165- "--volume" , "%s/distfiles:/var/cache/distfiles" % local_portage ,
166- "--volume" , "%s/packages:/var/cache/binpkgs" % local_portage ]
167+ "--security-opt" : "apparmor:unconfined" ,
168+ "--device" : "/dev/fuse" ,
169+ "--workdir" : "/root" ,
170+ "--volume" : [
171+ "%s:/var/db/repos/gentoo" % local_portage ,
172+ "%s/distfiles:/var/cache/distfiles" % local_portage ,
173+ "%s/packages:/var/cache/binpkgs" % local_portage ,
174+ ],
175+ }
167176
168177 if options .OPTIONS .storage_opt :
169178 for s in options .OPTIONS .storage_opt :
@@ -176,9 +185,11 @@ def _create_container(self, docker_image, local_portage, overlays):
176185 for o in overlays :
177186 docker_args += ["--volume=%s:%s" % o ]
178187
179- docker_args += [docker_image ]
180- options .log .info ("creating docker container with: %s" %
188+ docker_args += [self . docker_image_name ]
189+ options .log .info ("creating docker container with: %s" ,
181190 " " .join (docker_args ))
191+ self .docker_client .containers .create (self .docker_image , ** docker_args )
192+
182193 docker = subprocess .Popen (docker_args , stdout = subprocess .PIPE )
183194 docker .wait ()
184195
0 commit comments