Odoo Filestore Backup and Restore in Docker¶
Overview¶
This document covers backing up and restoring Odoo filestore directories from Docker containers using tar archives and volume mounting.
Backup Process¶
Creating a Filestore Backup¶
# Create tar archive
echo -e "${BLUE}[7/9]${NC} Creating an archive of the filestore..."
if docker run --rm --volumes-from "$ContainerName" -v "$TempDir:/backup" ubuntu tar -czf "/backup/filestore.tar" -C /var/lib/odoo/filestore/$Database . 2>/dev/null; then
echo -e "${GREEN}✓${NC} Filestore backed up successfully"
else
echo -e "${RED}✗${NC} Database backup failed!"
echo -e "${RED}Cleaning up and exiting...${NC}"
rm -rf "$TempDir"
exit 1
fi
Key Points:
- Uses --volumes-from to access the container's volumes
- Mounts a temporary directory to store the backup
- Creates a gzipped tar archive (tar -czf)
- Archives from /var/lib/odoo/filestore/$Database directory
- Redirects errors to /dev/null for cleaner output
Restore Process¶
Method 1: With Directory Existence Checks¶
# Restore tar archive to container
echo -e "${BLUE}[X/Y]${NC} Restoring filestore from archive..."
# Check if directories exist, create if they don't
echo -e "Ensuring filestore directories exist..."
if docker exec "$ContainerName" sh -c "[ ! -d /var/lib/odoo/filestore ]"; then
echo -e "Creating /var/lib/odoo/filestore directory..."
docker exec "$ContainerName" mkdir -p /var/lib/odoo/filestore
fi
if docker exec "$ContainerName" sh -c "[ ! -d /var/lib/odoo/filestore/$Database ]"; then
echo -e "Creating /var/lib/odoo/filestore/$Database directory..."
docker exec "$ContainerName" mkdir -p /var/lib/odoo/filestore/$Database
fi
# Extract the archive into the container
if docker run --rm --volumes-from "$ContainerName" -v "$TempDir:/backup" ubuntu tar -xzf "/backup/filestore.tar" -C /var/lib/odoo/filestore/$Database 2>/dev/null; then
echo -e "${GREEN}✓${NC} Filestore restored successfully"
else
echo -e "${RED}✗${NC} Filestore restore failed!"
echo -e "${RED}Cleaning up and exiting...${NC}"
rm -rf "$TempDir"
exit 1
fi
# Fix permissions
docker exec "$ContainerName" chown -R odoo:odoo /var/lib/odoo/filestore
Method 2: Simplified Approach (Recommended)¶
# Restore tar archive to container
echo -e "${BLUE}[X/Y]${NC} Restoring filestore from archive..."
# Create directories (no error if they already exist)
echo -e "Ensuring filestore directories exist..."
docker exec "$ContainerName" mkdir -p /var/lib/odoo/filestore/$Database
# Extract the archive into the container
if docker run --rm --volumes-from "$ContainerName" -v "$TempDir:/backup" ubuntu tar -xzf "/backup/filestore.tar" -C /var/lib/odoo/filestore/$Database 2>/dev/null; then
echo -e "${GREEN}✓${NC} Filestore restored successfully"
else
echo -e "${RED}✗${NC} Filestore restore failed!"
echo -e "${RED}Cleaning up and exiting...${NC}"
rm -rf "$TempDir"
exit 1
fi
# Fix permissions
docker exec "$ContainerName" chown -R odoo:odoo /var/lib/odoo/filestore
Why Method 2 is Recommended:
- mkdir -p creates parent directories automatically
- Doesn't fail if directories already exist
- Simpler and more concise code
- Single command instead of multiple checks
Key Differences: Backup vs Restore¶
| Aspect | Backup | Restore |
|---|---|---|
| Tar operation | tar -czf (create) |
tar -xzf (extract) |
| Directory preparation | Not needed | Must ensure directories exist |
| Permission handling | Not needed | Must fix ownership after restore |
| Direction | Container → Host | Host → Container |
Important Considerations¶
Directory Structure¶
/var/lib/odoo/filestore- Base filestore directory/var/lib/odoo/filestore/$Database- Database-specific filestore- These directories typically don't exist on first run of a new container
Permissions¶
After restoring, always fix permissions since extracted files may not have correct ownership:
docker exec "$ContainerName" chown -R odoo:odoo /var/lib/odoo/filestore
Optional: Clear Existing Filestore¶
To restore to a completely empty filestore (removing existing files first):
# Clear existing filestore before restore
docker exec "$ContainerName" rm -rf /var/lib/odoo/filestore/$Database
Variables Used¶
$ContainerName- Name of the Odoo Docker container$TempDir- Temporary directory on host for backup/restore files$Database- Name of the Odoo database- Color codes:
$BLUE,$NC,$GREEN,$RED- For colored terminal output
Related Topics¶
- PostgreSQL Backup and Restore in Docker
- Docker volumes and volume mounting
- Odoo deployment and migration