@@ -454,6 +454,11 @@ resource "coder_agent" "dev" {
454
454
threshold = data. coder_parameter . res_mon_volume_threshold . value
455
455
path = data. coder_parameter . res_mon_volume_path . value
456
456
}
457
+ volume {
458
+ enabled = true
459
+ threshold = data. coder_parameter . res_mon_volume_threshold . value
460
+ path = " /var/lib/docker"
461
+ }
457
462
}
458
463
459
464
startup_script = <<- EOT
@@ -483,15 +488,13 @@ resource "coder_agent" "dev" {
483
488
#!/usr/bin/env bash
484
489
set -eux -o pipefail
485
490
486
- # Stop all running containers and prune the system to clean up
487
- # /var/lib/docker to prevent errors during workspace destroy.
491
+ # Clean up the unused resources to keep storage usage low.
488
492
#
489
493
# WARNING! This will remove:
490
- # - all containers
491
- # - all networks
492
- # - all images
493
- # - all build cache
494
- docker ps -q | xargs docker stop
494
+ # - all stopped containers
495
+ # - all networks not used by at least one container
496
+ # - all images without at least one container associated to them
497
+ # - all build cache
495
498
docker system prune -a -f
496
499
497
500
# Stop the Docker service to prevent errors during workspace destroy.
@@ -532,6 +535,38 @@ resource "docker_volume" "home_volume" {
532
535
}
533
536
}
534
537
538
+ resource "coder_metadata" "docker_volume" {
539
+ resource_id = docker_volume. docker_volume . id
540
+ hide = true # Hide it as it is not useful to see in the UI.
541
+ }
542
+
543
+ resource "docker_volume" "docker_volume" {
544
+ name = " coder-${ data . coder_workspace . me . id } -docker"
545
+ # Protect the volume from being deleted due to changes in attributes.
546
+ lifecycle {
547
+ ignore_changes = all
548
+ }
549
+ # Add labels in Docker to keep track of orphan resources.
550
+ labels {
551
+ label = " coder.owner"
552
+ value = data. coder_workspace_owner . me . name
553
+ }
554
+ labels {
555
+ label = " coder.owner_id"
556
+ value = data. coder_workspace_owner . me . id
557
+ }
558
+ labels {
559
+ label = " coder.workspace_id"
560
+ value = data. coder_workspace . me . id
561
+ }
562
+ # This field becomes outdated if the workspace is renamed but can
563
+ # be useful for debugging or cleaning out dangling volumes.
564
+ labels {
565
+ label = " coder.workspace_name_at_creation"
566
+ value = data. coder_workspace . me . name
567
+ }
568
+ }
569
+
535
570
data "docker_registry_image" "dogfood" {
536
571
name = data. coder_parameter . image_type . value
537
572
}
@@ -593,6 +628,11 @@ resource "docker_container" "workspace" {
593
628
volume_name = docker_volume. home_volume . name
594
629
read_only = false
595
630
}
631
+ volumes {
632
+ container_path = " /var/lib/docker/"
633
+ volume_name = docker_volume. docker_volume . name
634
+ read_only = false
635
+ }
596
636
capabilities {
597
637
add = [" CAP_NET_ADMIN" ," CAP_SYS_NICE" ]
598
638
}