--- name: nordvpn_container_run kind: function lang: go domain: infra version: "1.0.0" purity: impure signature: "func NordVPNContainerRun(opts NordVPNContainerRunOpts) (string, error)" description: "Ejecuta un container Docker cuyo trafico pasa por el gateway NordVPN usando --network=container:. El container hereda la IP y tunel VPN del gateway." tags: [vpn, nordvpn, docker, container, run, infra, network] uses_functions: ["docker_run_container_go_infra"] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [fmt] params: - name: opts desc: "estructura NordVPNContainerRunOpts con Image, Cmd, Env, Volumes, Detach, Name, Gateway" output: "ID del contenedor ejecutado bajo VPN" tested: false tests: [] test_file_path: "" file_path: "functions/infra/nordvpn_container_run.go" --- ## Ejemplo ```go // Verificar IP desde VPN id, err := NordVPNContainerRun(NordVPNContainerRunOpts{ Image: "curlimages/curl", Cmd: []string{"https://api.ipify.org"}, Remove: true, Gateway: "nordvpn", }) // Ejecutar scraper bajo VPN id, err := NordVPNContainerRun(NordVPNContainerRunOpts{ Image: "my-scraper:latest", Env: map[string]string{"TARGET_URL": "https://example.com"}, Volumes: []string{"/tmp/output:/output"}, Detach: true, Name: "scraper-vpn", }) // Navegador headless bajo VPN id, err := NordVPNContainerRun(NordVPNContainerRunOpts{ Image: "chromedp/headless-shell", Detach: true, Name: "chrome-vpn", }) ``` ## Notas Requiere que el container gateway NordVPN este corriendo (usar `NordVPNContainerStart` primero). El container cliente no necesita capabilities especiales — hereda la red del gateway. Con `--network=container:X` el container no puede exponer puertos propios; los puertos deben mapearse en el gateway.