Resolving Docker Image Deletion Conflicts: Analysis and Handling of 'Unable to Remove Repository Reference' Error

Nov 22, 2025 · Programming · 7 views · 7.8

Keywords: Docker image deletion | Container reference conflict | Repository reference error

Abstract: This article provides an in-depth analysis of common Docker image deletion conflicts, explaining the relationship between containers and images, and offering a complete troubleshooting workflow. Through practical case studies, it demonstrates how to properly remove images referenced by containers, including container identification, safe removal, and image cleanup procedures to completely resolve the 'conflict: unable to remove repository reference' error.

Problem Background and Error Analysis

During Docker container management, developers frequently encounter situations where images cannot be deleted, with the system returning error messages: Error response from daemon: conflict: unable to remove repository reference "training/webapp" (must force) - container 0bd2b54678c7 is using its referenced image 54bb4e8718e8. The root cause of this error lies in Docker's reference mechanism design.

Docker Container and Image Relationship Analysis

There exists a strict dependency relationship between Docker images and containers. Images can be understood as read-only template files, while containers are runnable instances created based on these templates. When an image is referenced by containers, the Docker system maintains this dependency relationship to prevent data inconsistency.

The current container status in the system can be viewed using the following command:

sudo docker ps -as

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
78479ffeba5c        ubuntu              "/bin/bash"         42 hours ago        Exited (0) 42 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
0bd2b54678c7        training/webapp     "python app.py"     5 days ago          Exited (0) 5 days ago                         backstabbing_ritchie   0 B (virtual 323.7 MB)
0adbc74a3803        training/webapp     "python app.py"     5 days ago          Exited (143) 5 days ago                       drunk_feynman          0 B (virtual 323.7 MB)

From the output, it's evident that although containers related to training/webapp are in the Exited state, they still maintain references to the image, which is the fundamental reason for the deletion failure.

Complete Solution Workflow

To successfully delete a referenced image, operations must be performed in the correct order: first remove all containers referencing the image, then delete the image itself.

Step 1: Identify and Remove Related Containers

Based on the container list, we need to remove all containers using the training/webapp image. Deletion is performed using container names:

$ sudo docker rm backstabbing_ritchie
backstabbing_ritchie

$ sudo docker rm drunk_feynman
drunk_feynman

These two commands successfully removed all containers referencing the training/webapp image. It's important to note that even when containers are in a stopped state, they still maintain references to images, which is part of Docker's safety mechanism design.

Step 2: Delete Target Image

After all related containers have been removed, the training/webapp image can now be safely deleted:

$ sudo docker rmi training/webapp
Untagged: training/webapp:latest
Deleted: 54bb4e8718e8600d78a5d7c62208c2f13c8caf0e4fe73d2bc0e474e93659c0b5
Deleted: f74dd040041eb4c032d3025fe38ea85de8075992bdce6789b694a44b20feb8de
Deleted: 7cbae69141977b99c44dc6957b032ad50c1379124d62b7d7d05ab7329b42348e
Deleted: abb991a4ed5e4cde2d9964aec4cccbe0015ba9cc9838b696e7a32e1ddf4a49bd
Deleted: 1952e3bf3d7e8e6a9b1e23bd4142e3c42ff7f4b7925122189704323593fd54ac
Deleted: f95ebd363bf27a7546deced7a41a4099334e37a3d2901fa3817e62bb1ade183f
Deleted: 20dd0c75901396d41a7b64d551ff04952084cc3947e66c67bae35759c80da338
Deleted: 2505b734adda3720799dde5004302f5edb3f2a2ff71438f6488b530b728ba666
Deleted: 2ee0b8f351f753f78f1178000ae37616eb5bf241d4ef041b612d58e1fd2aefdc
Deleted: 2ce633e3e9c9bd9e8fe7ade5984d7656ec3fc3994f05a97d5490190ef95bce8d
Deleted: 98b15185dba7f85308eb0e21196956bba653cf142b36dc08059b3468a01bf35d
Deleted: 515565c29c940355ec886c992231c6019a6cffa17ff1d2abdfc844867c9080c5
Deleted: 2880a3395eded9b748c94d27767e1e202f8d7cb06f1e40e18d1b1c77687aef77

From the detailed output of the deletion process, it's clear that the training/webapp image actually consists of multiple layers, and Docker deletes these image layers sequentially to ensure complete storage space release.

Step 3: Verify Operation Results

After completing the operations, verify the deletion effect by checking the container list again:

$ sudo docker ps -as
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
78479ffeba5c        ubuntu              "/bin/bash"         43 hours ago        Exited (0) 43 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)

The system now contains only containers related to ubuntu, and all containers and images related to training/webapp have been successfully removed.

Technical Principle Deep Dive

Docker's image deletion mechanism is based on reference counting principles. Each image maintains a reference counter that records how many containers are currently using that image. Only when the reference count drops to zero can the image be safely deleted.

This design offers several important advantages:

Related Command Extensions

Beyond basic deletion operations, Docker provides other useful management commands:

# View all images
docker images

# View all containers (including stopped ones)
docker ps -a

# Force delete running containers
docker rm -f <container_id>

# Using new command format (Docker 1.13+)
docker container ls -a
docker image ls
docker container rm <container_id>
docker image rm <image_id>

Best Practice Recommendations

To avoid similar deletion conflict issues, it's recommended to follow these practices in daily development:

By understanding Docker's reference mechanism and mastering the correct operational workflow, developers can efficiently manage container and image resources while avoiding common deletion conflict issues.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.