@@ -399,14 +399,14 @@ func runDockerCVM(ctx context.Context, log slog.Logger, client dockerutil.Client
399
399
if err != nil {
400
400
return xerrors .Errorf ("set oom score: %w" , err )
401
401
}
402
- ref , err := name .NewTag (flags .innerImage )
402
+ ref , err := name .ParseReference (flags .innerImage )
403
403
if err != nil {
404
404
return xerrors .Errorf ("parse ref: %w" , err )
405
405
}
406
406
407
407
var dockerAuth dockerutil.AuthConfig
408
408
if flags .imagePullSecret != "" {
409
- dockerAuth , err = dockerutil .AuthConfigFromString (flags .imagePullSecret , ref .RegistryStr ())
409
+ dockerAuth , err = dockerutil .AuthConfigFromString (flags .imagePullSecret , ref .Context (). RegistryStr ())
410
410
if err != nil {
411
411
return xerrors .Errorf ("parse auth config: %w" , err )
412
412
}
@@ -415,7 +415,7 @@ func runDockerCVM(ctx context.Context, log slog.Logger, client dockerutil.Client
415
415
log .Info (ctx , "checking for docker config file" , slog .F ("path" , flags .dockerConfig ))
416
416
if _ , err := fs .Stat (flags .dockerConfig ); err == nil {
417
417
log .Info (ctx , "detected file" , slog .F ("image" , flags .innerImage ))
418
- dockerAuth , err = dockerutil .AuthConfigFromPath (flags .dockerConfig , ref .RegistryStr ())
418
+ dockerAuth , err = dockerutil .AuthConfigFromPath (flags .dockerConfig , ref .Context (). RegistryStr ())
419
419
if err != nil && ! xerrors .Is (err , os .ErrNotExist ) {
420
420
return xerrors .Errorf ("auth config from file: %w" , err )
421
421
}
@@ -656,6 +656,13 @@ func runDockerCVM(ctx context.Context, log slog.Logger, client dockerutil.Client
656
656
}
657
657
658
658
blog .Info ("Creating workspace..." )
659
+ // If imgMeta.HasInit is true, we just use flags.boostrapScript as the entrypoint.
660
+ // But if it's false, we need to run /sbin/init as the entrypoint.
661
+ // We need to mount or run some exec command that injects a systemd service for starting
662
+ // the coder agent.
663
+
664
+ // We need to check that if PID1 is systemd (or /sbin/init) that systemd propagates SIGTERM
665
+ // to service units. If it doesn't then this solution doesn't help us.
659
666
660
667
// Create the inner container.
661
668
containerID , err := dockerutil .CreateContainer (ctx , client , & dockerutil.ContainerConfig {
0 commit comments