Hello! Sorry if this is covered somewhere, if that’s the case I haven’t been able to find it.
I’ve been struggling to connect to external services from my docker app (node).
More specifically I’m trying to connect to a SMTP server at mailserver.loopia.se but I’m getting the error
getaddrinfo ENOTFOUND ‘mailcluster.loopia.se’
I’ve accessed the container through flyctl ssh console and verified that the container in fact can access this address. Output from nslookup and ping below:
PING mailcluster.loopia.se (2a02:250:0:48::12): 56 data bytes
64 bytes from 2a02:250:0:48::12: seq=0 ttl=53 time=24.167 ms
64 bytes from 2a02:250:0:48::12: seq=1 ttl=53 time=24.719 ms
64 bytes from 2a02:250:0:48::12: seq=2 ttl=53 time=24.322 ms
64 bytes from 2a02:250:0:48::12: seq=3 ttl=53 time=24.427 ms
But the app will not resolve the address for some reason.
Running out of ideas. Any help would be greatly appreciated
Are you using a Dockerfile based app? If so, does your base image use Alpine Linux? Only if so, I’ve previously had similar weird errors with DNS when running a Node app. Couldn’t figure it out either! What fixed it for me was switching to a different base image, such as XX-slim. And then the DNS errors went away. Total guess but can’t hurt to try.
For your question, yes and yes. Both Dockerfile-based and Alpine Linux.
So based on your info, I just switched to bullseye-slim and tried again, but no change unfortunately. The container itself seems to know how to resolve the address, but when I try to resolve it from the app, it doesn’t.
Running the container locally works fine, and it connects to the SMTP properly and sends the e-mail I want. Only when I deploy it and run on fly I get this odd DNS-related error.
It seems like the app is not able to resolve anything outside the private network, I can connect to my other machines on the private network through the application running in the container. It only seems to apply to external services.
E.g. if I do a request towards example-db.internal that works fine, if I request google.com I get ENOTFOUND.
Strange! When I switched from Alpine to [another Linux] that fixed my DNS errors with Node. So perhaps there is something else going on … maybe with the host machine itself
Since Fly doesn’t charge for registry storage space, the size of the image is less of a concern (within reason) so maybe try a full Ubuntu/Debian as your base image. Shouldn’t be needed but worth a try while waiting for someone from Fly to debug. That would definitely rule out it being the base image.
I know Fly use Google’s DNS for resolving external domains and so maybe it’s related to that? Again, no idea why it would be. But that was from my fun with DNS a while back: