Deno 2.1.4 - node:http's http.request socketPath option fails in Deno, but works in Node. #27675
Open
Description
Summary:
- Deno's
node:http
module behaves differently than Node.js'shttp
module when usinghttp.request
with thesocketPath
option to connect to the Docker socket. - Instead of connecting to the Docker socket, Deno appears to attempt a TCP connection to
http://localhost/info
, resulting in anECONNREFUSED
error. - This discrepancy was discovered while troubleshooting a failure using
@testcontainers/postgresql
library and was traced down through its dependencies (dockerode
,docker-modem
) to this minimal reproduction. - The equivalent code works perfectly in node, indicating a failure in Deno.
Reproduction Steps:
1. Setup:
- Install Docker Desktop on macOS.
- Ensure the Docker daemon is running and accessible via the default Unix socket:
/Users/<your_username>/.docker/run/docker.sock
(replace<your_username>
with your actual username). - Make sure you have "Allow the default Docker socket to be used" enabled under advanced settings in Docker.
2. Node.js (Correct Behavior):
Create a file named node-test.js
with the following content:
Ensure you set "type": "module"
in package.json
.
import http from "http";
const options = {
socketPath: "/Users/<your_username>/.docker/run/docker.sock",
path: "/info",
method: "GET",
};
const req = http.request(options, () => {
console.log(`Success`);
});
req.on("error", (e) => {
console.error(`Error: ${e.message}`);
});
req.end();
Run: node node-test.js
- Expected Output:
Success
- Actual Output:
Success
3. Deno (Incorrect Behavior):
- Create a file named
deno-test.ts
with the following content:
import http from "node:http";
const options = {
socketPath: "/Users/<your_username>/.docker/run/docker.sock",
path: "/info",
method: "GET",
};
const req = http.request(options, () => {
console.log(`Success`);
});
req.on("error", (e) => {
console.error(`Error: ${e.message}`);
});
req.end();
Run deno -A deno-test.ts
- Expected Output:
Success
- Actual Output:
Error: error sending request for url (http://localhost/info): client error (Connect): tcp connect error: Connection refused (os error 61): Connection refused (os error 61)
Environment:
deno 2.1.4 (stable, release, x86_64-apple-darwin)
v8 13.0.245.12-rusty
typescript 5.6.2
Docker Desktop: 4.37.2 (179585)