zed-industries/zed · error
Neither curl nor wget is available
Error message
Neither curl nor wget is available
What it means
To provision the remote server inside a container, Zed downloads the release with `curl -fL <url> -o <tmp>` over docker exec; if that fails and `which curl` also fails, it retries with wget, and only when `which wget` fails too does it bail. The container image simply ships no HTTP download tool.
Source
Thrown at crates/remote/src/transport/docker.rs:633
log::info!("curl is not available, trying wget");
match self
.run_docker_exec(
"wget",
Some(remote_dir_for_server),
&Default::default(),
&[url, "-O", &tmp_path_gz.display(self.path_style())],
)
.await
{
Ok(_) => {}
Err(e) => {
if self
.run_docker_exec("which", None, &Default::default(), &["wget"])
.await
.is_ok()
{
return Err(e);
} else {
anyhow::bail!("Neither curl nor wget is available");
}
}
}
}
}
Ok(())
}
fn kill_inner(&self) -> Result<()> {
if let Some(pid) = self.proxy_process.lock().take() {
if let Ok(_) = util::command::new_command("kill")
.arg(pid.to_string())
.spawn()
{
Ok(())
} else {View on GitHub (pinned to 5a9b9558db)
Solutions
- Use an image with a downloader: alpine `apk add --no-cache curl`, debian `apt-get update && apt-get install -y curl`
- Switch to a fuller tag/base image of the same application and reconnect
- Pre-install the zed-remote-server binary into the image so no in-container download is needed
- With a dev-channel Zed, set ZED_BUILD_REMOTE_SERVER so the server is uploaded from the local machine instead of downloaded
Example fix
# before FROM scratch COPY app /app # after FROM alpine RUN apk add --no-cache curl COPY app /app
Defensive patterns
Strategy: fallback
Validate before calling
async fn container_has_download_tool(conn: &DockerExecConnection) -> bool {
conn.run_docker_exec("which", None, &Default::default(), &["curl"])
.await
.is_ok()
|| conn.run_docker_exec("which", None, &Default::default(), &["wget"])
.await
.is_ok()
} Try / catch
if let Err(e) = download_result {
if e.to_string().contains("Neither curl nor wget") {
// fallback: upload the server binary from the local machine (ZED_BUILD_REMOTE_SERVER)
// or ask the user to switch to an image with curl/wget
}
return Err(e);
} Prevention
- Standardize dev-container images on alpine/debian with curl installed
- Pre-install zed-remote-server into the image so no download is needed
- Keep a ZED_BUILD_REMOTE_SERVER build available to switch from download to upload
When it happens
Trigger: run_docker_exec('curl', ...) errors because curl is absent, the `which curl` probe fails, the wget attempt also errors, and the `which wget` probe fails — typical of scratch, distroless, or stripped-down images.
Common situations: FROM scratch / distroless images containing only the app binary; hardened Chainguard-style images without a package manager; CI images trimmed for size; sidecar containers used as dev environments.
Related errors
- Neither curl nor wget is available
- failed to upload via docker cp {} -> {}: {}
- failed to change ownership for zed_remote_server via chown:
- ZedPierAgent requires EVAL_CLI_CONTAINER_PATH (the eval-cli
- Failed to install or start judge proxy (exit {result.return_
AI-assisted analysis of zed-industries/zed@5a9b9558db (2026-08-20).
Data as JSON: /api/errors/505ab72adc8a862b.
Report an issue: GitHub.