---
name: docker_cp_file
kind: function
lang: bash
domain: infra
version: "1.0.0"
purity: impure
signature: "docker_cp_file(local_path: string, container_name: string, dest_path: string) -> string"
description: "Copia un archivo local a un contenedor Docker y verifica que el tamaño coincide. Imprime JSON con local_size y remote_size a stdout. Sale con exit code 1 si docker cp falla o los tamaños difieren."
tags: [docker, cp, copy, file, container, transfer, infra, bash]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
params:
  - name: local_path
    desc: "ruta del archivo local a copiar"
  - name: container_name
    desc: "nombre del contenedor Docker destino"
  - name: dest_path
    desc: "ruta destino dentro del contenedor"
output: "JSON con local_size y remote_size en bytes"
tested: false
tests: []
test_file_path: ""
file_path: "bash/functions/infra/docker_cp_file.sh"
---

## Ejemplo

```bash
source functions/infra/docker_cp_file.sh

result=$(docker_cp_file $HOME/fn_registry/registry.db metabase /registry.db)
echo "$result"
# {"local_size":524288,"remote_size":524288}

local_size=$(echo "$result" | grep -o '"local_size":[0-9]*' | cut -d: -f2)
```

## Notas

La verificación de tamaño usa `docker exec stat -c%s` sobre el contenedor destino. Si `stat` no está disponible en el contenedor, `remote_size` será -1 y la función fallará.

Output a stdout: JSON minificado con campos `local_size` y `remote_size` (enteros, bytes).

Usa `printf` en lugar de `echo` para garantizar que no haya newline extra en el JSON.
