[READ-ONLY] Mirror of https://github.com/FoxxMD/docker-proxy-filter. Filter the contents of Docker API responses
docker docker-socket-proxy filter
0

Configure Feed

Select the types of activity you want to include in your feed.

Make 404 response look like docker api and improve logging

FoxxMD (Oct 7, 2025, 7:57 PM UTC) 81f65309 678ce3cb

+17 -12
+17 -12
src/main.rs
··· 34 34 resource: String 35 35 } 36 36 37 - // #[derive(Serialize, Deserialize)] 38 - // struct DockerErrorMessage { 39 - // pub message: Option<String> 40 - // } 37 + #[derive(Serialize, Deserialize)] 38 + struct DockerErrorMessage { 39 + pub message: String 40 + } 41 41 42 42 #[derive(Serialize, Deserialize)] 43 43 struct ContainerSummary { ··· 98 98 .map_err(web::Error::from)?; 99 99 100 100 let mut client_resp = web::HttpResponse::build(res.status()); 101 + client_resp.content_type(res.content_type()); 101 102 102 103 if res.status() == 200 { 103 104 ··· 110 111 .collect::<Vec<&ContainerSummary>>(); 111 112 112 113 let fresp = web::HttpResponse::build(res.status()).json(&filtered_containers); 113 - 114 + debug!("{} of {} containers valid", filtered_containers.len(), containers.len()); 114 115 Ok(fresp) 115 116 } else { 116 117 ··· 118 119 Some (m) => { 119 120 let mut cm = data.container_map.lock().unwrap(); 120 121 if !cm.contains_key(&m.id) { 121 - let id_res = get_container_name(&forward_url.to_string(), &m.id).await; 122 - match id_res { 123 - Ok(id) => { 124 - cm.insert(m.id.clone(), Some(id)); 122 + debug!("Requested container Id not in map, trying to inspect: {}", &m.id); 123 + let name_res = get_container_name(&forward_url.to_string(), &m.id).await; 124 + match name_res { 125 + Ok(name) => { 126 + debug!("Container Id {} has name '{}'", &m.id, &name); 127 + cm.insert(m.id.clone(), Some(name)); 125 128 } 126 129 Err(e) => { 127 - warn!("Could not get container info: {e}"); 130 + warn!("Could not inspect container {}: {e}", &m.id); 128 131 cm.insert(m.id.clone(), None); 129 132 } 130 133 } ··· 153 156 Ok(client_resp.streaming(res.into_stream())) 154 157 } 155 158 } else { 159 + debug!("Container {} does not include container filter name, 404ing...", &m.id); 156 160 client_resp.status(StatusCode::NOT_FOUND); 157 - Ok(client_resp.finish()) 161 + Ok(client_resp.json(&DockerErrorMessage { message: format!("No such container: {}", &m.id)})) 158 162 } 159 163 } 160 164 None => { 165 + debug!("Container {} does not exist or Docker API previously returned an error, 404ing...", &m.id); 161 166 client_resp.status(StatusCode::NOT_FOUND); 162 - Ok(client_resp.finish()) 167 + Ok(client_resp.json(&DockerErrorMessage { message: format!("No such container: {}", &m.id)})) 163 168 } 164 169 } 165 170 }