by danduran on Development 4 min read, Comments: 0 (Add Your Comment!)

How to Update Dockerized Applications Without Losing Your Data

TL;DR:

Learn the steps to safely update Docker containers while preserving data. This guide covers key processes, best practices, and troubleshooting tips to handle updates without disruptions or data loss.

How to Update Dockerized Applications Without Losing Your Data

Updating Dockerized applications can seem tricky, especially when you want to ensure your data and configurations stay intact. This step-by-step guide walks you through the process, offering best practices and troubleshooting tips to seamlessly upgrade your containers without compromising your valuable data.

  1. Overview of the Process
  2. Prerequisites
  3. Steps to Update a Docker Container
  4. Example Scenario: Updating Open Web UI
  5. Troubleshooting Common Issues

1. Overview of the Process

Updating a Dockerized application involves:
- Stopping the running container.
- Pulling the latest image.
- Re-creating the container with the updated image, ensuring volumes or bind mounts are reused to retain data.
- Optionally, cleaning up old containers and images.


2. Prerequisites

Before proceeding, ensure:
- Docker is installed and running on your system.
- You understand how your container is set up, particularly volume or bind mount configurations (for data persistence).


3. Steps to Update a Docker Container

Step 1: Inspect the Current Container

Identify volume mappings and port bindings to ensure data is preserved. Replace container_name with your actual container name:

docker inspect container_name

Look for:
- Mounts: Indicates volumes or host directories mapped to the container.
- PortBindings: Specifies port mappings between the host and container.

  • Example:
"Mounts": [
            {
                "Type": "volume",
                "Name": "open-webui",
                "Source": "/var/lib/docker/volumes/open-webui/_data",
                "Destination": "/app/backend/data",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ]
...
            "PortBindings": {
                "8080/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "3000"
                    }
                ]
            }

Step 2: Stop the Container

Stop the running container without deleting it:

docker stop container_name

Step 3: Pull the Latest Image

Fetch the updated version of the Docker image:

docker pull image_name

Step 4: Recreate the Container

Run the updated image with the same configuration as the original container. Ensure volumes and ports match to maintain data continuity:

docker run -d --name container_name \
  -p host_port:container_port \
  -v volume_name:/container_path \
  image_name

Step 5: Test the New Container

Verify the updated container is functioning as expected:

docker ps
docker logs container_name

Step 6: Remove the Old Container (Optional)

Once the new container is confirmed to work, remove the old one to free up system resources:

docker rm old_container_name

4. Example Scenario: Updating Open Web UI

Step 1: Inspect the Current Setup

Run:

docker inspect open-webui

Find the volume (open-webui:/app/backend/data) and port bindings (3000:8080).

Step 2: Stop the Current Container

Stop the container:

docker stop open-webui

Step 3: Rename the Existing Container

If you want to keep the old container as a backup:

docker rename open-webui open-webui-old

Step 4: Pull the Latest Image

Update the image:

docker pull ghcr.io/open-webui/open-webui:main

Step 5: Run the Updated Container

Start the new container with the same name and volume:

docker run -d --name open-webui \
  -p 3000:8080 \
  -v open-webui:/app/backend/data \
  ghcr.io/open-webui/open-webui:main

Step 6: Verify the Update

Ensure the new container is running properly:

docker ps
docker logs open-webui

Step 7: Remove the Old Container (Optional)

If everything works as expected:

docker rm open-webui-old

5. Troubleshooting Common Issues

Issue 1: "Conflict. The container name is already in use."

Solution: Rename or remove the old container:

docker rename container_name container_name_old
# OR
docker rm container_name

Issue 2: "Volume data lost after update."

Solution: Ensure volumes are mapped correctly during container creation. Check with:

docker volume ls
docker volume inspect volume_name

Issue 3: "Container not starting after update."

Solution: Check the logs for errors:

docker logs container_name

Issue 4: "Image update not recognized."

Solution: Force-pull the image to ensure you’re using the latest version:

docker pull --no-cache image_name

This approach ensures minimal downtime and avoids data loss, making it suitable for production environments.

Let me know what you think!

Dan D.

No comments yet. Be the first to comment!