coder / code-server

VS Code in the browser
https://coder.com
MIT License
67.86k stars 5.58k forks source link

[Bug] Getting connect ECONNREFUSED when app is running on localhost #7017

Open 15m43lk4155y opened 3 days ago

15m43lk4155y commented 3 days ago

Is there an existing issue for this?

OS/Web Information

Steps to Reproduce

  1. docker container running locally with the image built using the following Dockerfile:
    
    FROM codercom/code-server:4.91.1

CMD ["dumb-init", "code-server", "--proxy-domain", "{{port}}.customdomain.tld", "--port", "8443", "--auth", "none"]

3. local DNS pointing customdomain.tld to 127.0.0.1
4. NGINX reverse proxy that points to the code-server instance with two .conf files:

server { listen 80; server_name customdomain.tld; location / { proxy_pass http://container_ip:8443; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip; } }

and

server { listen 80; server_name ~^(\d+).customdomain.tld$; location / { proxy_pass http://container_ip:8443; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip; } }


5. run http server in the code server terminal using `python -m http.server -b localhost` then open 8000.customdomain.tld in the browser

### Expected

It should show the http server correctly

### Actual

the following error displays:
![Screenshot from 2024-10-01 04-28-46](https://github.com/user-attachments/assets/707336ad-1284-4b67-9c51-b9e426f7c188)
Note that when running `python -m http.server -b 127.0.0.1` the server is shown correctly as per the following image:
![Screenshot from 2024-10-01 04-31-04](https://github.com/user-attachments/assets/5a8cb7f6-2391-4a24-ab09-691f22766246)

### Logs

_No response_

### Screenshot/Video

_No response_

### Does this bug reproduce in native VS Code?

I did not test native VS Code

### Does this bug reproduce in GitHub Codespaces?

I did not test GitHub Codespaces

### Are you accessing code-server over a secure context?

- [ ] I am using a secure context.

### Notes

This was tested using an angular app as well (since the host is localhost by default in it) and the same happens when I set the host in ng serve to 127.0.0.1 the app is shown correctly when I leave it by default (aka localhost) it doesn't
code-asher commented 2 days ago

Huh, I would expect both localhost and 127.0.0.1 to be inaccessible if they are inside the Docker container but 127.0.0.1 works for the Angular app? Does code-server work if you bind code-server to 0.0.0.0?

CMD ["dumb-init", "code-server", "--proxy-domain", "{{port}}.customdomain.tld", "--auth", "none", "--bind-addr", "0.0.0.0:8443"]
code-asher commented 2 days ago

Oh sorry I misunderstood, you are getting that error through code-server's built-in proxy. 8000.customdomain.tld will try to proxy whatever is on port 8000, so this error means nothing is running at the address 0.0.0.0:8000.

code-asher commented 2 days ago

If 127.0.0.1 works but not localhost, is it possible the Angular app is binding to ipv6?

15m43lk4155y commented 2 days ago

Huh, I would expect both localhost and 127.0.0.1 to be inaccessible if they are inside the Docker container but 127.0.0.1 works for the Angular app? Does code-server work if you bind code-server to 0.0.0.0?

CMD ["dumb-init", "code-server", "--proxy-domain", "{{port}}.customdomain.tld", "--auth", "none", "--bind-addr", "0.0.0.0:8443"]

Sorry for the miss I do actually bind it to 0.0.0.0 (what I gave is an earlier version of the Dockerfile, what I am using now is the following): CMD ["dumb-init", "code-server", "--auth", "none", "--bind-addr", "0.0.0.0:8443", "--proxy-domain", "{{port}}.customdomain.tld"]

If 127.0.0.1 works but not localhost, is it possible the Angular app is binding to ipv6?

Well upon further tests I found out that this might be the case given the following tests:

The following displays the server correctly on 8000.customdomain.tld Screenshot from 2024-10-01 20-45-35

The following displays the server correctly on 8000.customdomain.tld Screenshot from 2024-10-01 20-45-44

The following gives connect ECONNREFUSED 0.0.0.0:8000 on 8000.customdomain.tld Screenshot from 2024-10-01 20-46-01

So the issue as I understand is that the built-in proxy forwards the request to 0.0.0.0 even when the running server is binding to ipv6?