Guide Update n8n Container

Guide Update n8n Container

Step 1: Backup First

cd ~/n8n

# Backup your data volume ?? 
sudo cp -r /var/lib/docker/volumes/n8n_n8n_data/_data \
           /var/lib/docker/volumes/n8n_n8n_data/_data.backup.$(date +%Y%m%d)

# Backup your docker-compose.yml and .env
cp docker-compose.yml docker-compose.yml.backup
cp .env .env.backup

Step 2: Pull Latest Image

# Pull the latest n8n image
docker compose pull n8n

Step 3: Recreate Container

# Stop and recreate with new image
docker compose up -d --force-recreate

# Or stop, remove, and start fresh
docker compose down
docker compose up -d

Step 4: Verify Update

# Check logs
docker compose logs -f n8n

# Check version
docker exec n8n-n8n-1 n8n --version

# Verify container is running
docker compose ps

Method 2: Update to Specific Version

Modify docker-compose.yml:

services:
  n8n:
    image: n8nio/n8n:1.68.0  # Specify exact version
    restart: unless-stopped
    networks:
      - web
    env_file:
      - .env
    volumes:
      - n8n_data:/home/node/.n8n

networks:
  web:
    external: true

volumes:
  n8n_data:

Then update:

docker compose pull
docker compose up -d --force-recreate

Method 3: Complete Rebuild (Nuclear Option)

Use this if containers are misbehaving:

# Stop and remove everything
docker compose down

# Remove old container (keeps volumes!)
docker rm -f n8n-n8n-1

# Remove old image
docker rmi n8nio/n8n:latest

# Pull fresh image
docker compose pull

# Start fresh
docker compose up -d

# Check logs
docker compose logs -f n8n

Check Available Versions

# See all available n8n versions on Docker Hub
curl -s https://registry.hub.docker.com/v2/repositories/n8nio/n8n/tags/ | grep -o '"name":"[^"]*' | cut -d'"' -f4 | head -20

Verify What Changed

Before update:

# Note current version
docker exec n8n-n8n-1 n8n --version
docker images | grep n8n

After update:

# Compare version
docker exec n8n-n8n-1 n8n --version

# Check image ID changed
docker images | grep n8n

Rollback to Previous Version

If update causes issues:

# Stop current version
docker compose down

# Modify docker-compose.yml to use specific old version
nano docker-compose.yml

Change:

image: n8nio/n8n:1.67.0  # Use previous version
# Start with old version
docker compose up -d

# Restore data backup if needed
sudo rm -rf /var/lib/docker/volumes/n8n_n8n_data/_data
sudo cp -r /var/lib/docker/volumes/n8n_n8n_data/_data.backup.20250131 \
           /var/lib/docker/volumes/n8n_n8n_data/_data

# Restart
docker compose restart

Automation: Update Script

Create a script for easy updates:

nano ~/update-n8n.sh
#!/bin/bash
set -e

echo "=== n8n Update Script ==="
cd ~/n8n

# Backup
echo "Creating backup..."
sudo cp -r /var/lib/docker/volumes/n8n_n8n_data/_data \
           /var/lib/docker/volumes/n8n_n8n_data/_data.backup.$(date +%Y%m%d-%H%M%S)

# Current version
echo "Current version:"
docker exec n8n-n8n-1 n8n --version || echo "Container not running"

# Update
echo "Pulling latest image..."
docker compose pull n8n

echo "Recreating container..."
docker compose up -d --force-recreate

# Wait for startup
echo "Waiting for n8n to start..."
sleep 10

# New version
echo "New version:"
docker exec n8n-n8n-1 n8n --version

echo "Checking logs..."
docker compose logs --tail=50 n8n

echo "=== Update complete! ==="

Make it executable:

chmod +x ~/update-n8n.sh

Run it:

~/update-n8n.sh

Best Practices

  1. Always backup before updating
  2. Check n8n release notes before major updates
  3. Test in staging first if you have critical workflows
  4. Update during low-traffic periods
  5. Keep at least 2-3 backups
  6. Monitor logs after update for 24 hours

Quick Reference

# Quick update (most common)
cd ~/n8n
docker compose pull
docker compose up -d --force-recreate

# Check version
docker exec n8n-n8n-1 n8n --version

# View logs
docker compose logs -f n8n

# Restart if needed
docker compose restart n8n

Save this for your future updates! 🚀

Reference