I have a weird problem with connecting to docker containers via tcp.
My OS is Ubuntu 20.04
What I do.
I start my web server in a container. I have tried official Postgresql image and the problem stays the same. So the problem is probably is not my image.
It listens 0.0.0.0 on port 8080 . I have changed the port several times, so it's not about 8080 only.
I forward 8080 container port to 8080 on host. I have tried forwarding to different ports and the problem stays.
Here's the command
docker run --rm --name my-web-container -p8080:8080 my-web-image
The is try to wget localhost:8080 and it hangs for a while and then says
Connection closed by foreign host.
telnet localhost 8080 works for some time and then says the same thing
# telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
If I wget localhost:8080 from within the container everything is fine.
If I add --net=host , to the command, starting the container, the problem goes away.
So I suppose there is something wrong with docker network. I could always use --net=host, but that obviously creates problems.
This appeared out of the blue, I didn't do anything. No system configuration, no installing new software.
I have tried
docker network inspect bridge
That gave the following.
[
{
"Name": "bridge",
"Id": "0e99160be59fd6417984db68695f6e6d4fa016e1d75a26734bccaff427ea6468",
"Created": "2022-06-08T11:16:47.413799955+03:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
I paid attention to this part
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
And 172.17.0.0 suspiciously looks like some ip address which my internet provider gave me.
I thought maybe I should give bridge network another address. So I have changed /etc/docker/daemon.json from
{
"experimental": true
}
to
{
"experimental": true,
"default-address-pools" :
[
{
"base":"172.26.0.0/16",
"size":24
}
]
}
And then ran service docker restart
After that the problem disappeared.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With