Docker for Linux: Connection Timeout - docker

We are trying to run docker-ce on a Ubuntu 18.04 machine(No firewall, machine has complete Internet access).
For installing Docker, we followed steps from the official documentation given here:
Docker for Ubuntu Official Documentation
Initial installation works fine, but when we try to pull/run any image, it throws a connection timeout error.
This is what the error looks like:
Error response from daemon: Get https://registry-1.docker.io/v2/: 1 net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
We have installed and used docker on different machines, but this is the first time that we are facing this issue.
We also created an account on docker hub and tried to logout and login using
sudo docker logout
sudo docker login
But this didn't help as well.
How do we resolve this issue?

Related

podman wsl communication issue

I am switching from docker to podman currently. Usually that works just fine. However on one of my many company laptops I ran into the following error:
PS C:\WINDOWS\system32> podman pull quay.io/podman/hello
Trying to pull quay.io/podman/hello:latest...
Error: initializing source docker://quay.io/podman/hello:latest: pinging container registry quay.io: Get "https://quay.io/v2/": dial tcp 54.163.152.191:443: i/o timeout
The above error I also get with other container registries. I tried:
Tried:
podman machine set --rootful
removing hyper-v and wsl
changing resolv.conf and adding nameserver
(tried also 8.8.8.8)
looked into symantec endpoint protection logs
(connection is not blocked)
switched between wsl 1 and 2
also tried some stuff from this thread (cf. No internet connection on WSL Ubuntu (Windows Subsystem for Linux))
I also do not get any internet inside e.g. an Ubuntu WSL VM. In Powershell running e.g. curl google.com works just fine
For completeness sake with the third option changes I get:
podman pull quay.io/podman/hello
Trying to pull quay.io/podman/hello:latest...
Error: initializing source docker://quay.io/podman/hello:latest: pinging container registry quay.io: Get "https://quay.io/v2/": dial tcp: lookup quay.io: Temporary failure in name resolution
Update:
I reinstalled Docker and get a similar issue
docker container run hello-world
Unable to find image 'hello-world:latest' locally
docker: initializing source docker://hello-world:latest: pinging container registry registry-1.docker.io: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io: Temporary failure in name resolution.
See 'docker run --help'.

Kubectl commands not working after adding proxy

I have installed a Kubenetes deployment (version:1.19.14) with docker version 20.10.8 on unbuntu 18.04.
I was able to install it and was working fine.
Due to some reason internet connectivity was lost on the host and on some finding I found that proxy settings were erased.
When I added the proxy the internet connectivity started working but strangely I was not able to give kubernetes kubectl commands anymore.
While trying kubectl commands after exporting proxy, the following error pops up:
Unable to connect to the server: net/http: request canceled while waiting for connection (Client.Timeout exeeded while awaiting headers)
We exported the proxy in the following manner:
export http_proxy=http://proxy.example.com:80
export https_proxy=$http_proxy
I searched and was suggested somewhere to make the proxy persistent through http-proxy.conf and reload the daemon:
sudo systemctl daemon-reload
sudo systemctl restart docker
Even after doing this the kubectl commands didn't work.
Please let me know how can I resolve this issue.
Kubectl is just a CLI that communicates with the api-server of the Kubernetes control plane. First of all you need to make sure that the api-server is running and healthy, and that this is not the source of your problem.
You can use the tool crictl to debug pods when Kubectl is not working. It takes directly to the underlying container runtime which would be containerd if you are using Docker.

Docker for windows: "server misbehaving" when trying to pull

I'm trying to run docker on windows (OS: Microsoft Windows 10 Pro 64bit, Docker ver: 18.09.0, build 4d60db4), by following the hello-world instruction here.
Then I got this following "server misbehaving" error:
Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: dial tcp: lookup <companyProxy> on 192.168.65.1:53: server misbehaving.
I tried to change the DNS (in Docker setting - Network - DNS Server) from Automatic to Fixed (8.8.8.8 or 8.8.4.4) as suggested here, but still did not solve the problem, and resulted in another type of error ("timeout exceeded").
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
I am behind company's proxy, and have set the proxy (and the credentials) both on environment variable and also docker setting.
I also tried to reinstall both docker and hyperV but still got the same problem.
Can anybody help? Thanks
We had this problem on Linux behind a corporate proxy after upgrading Docker from version 17 to the latest 19 (currently 19.03.5).
# docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: dial tcp: lookup http on 1.2.3.4:53: server misbehaving.
1.2.3.4 is the IP of our DNS server, which itself worked fine - I could resolve different hosts, also registry-1.docker.io from Docker.
Solution
The problem was how we set the proxy globally in /etc/systemd/system/docker.service.d/http-proxy.conf. Since its an MS AD user, it contains the username in the format of domain\user like this:
[Service]
Environment="HTTP_PROXY=http://domain\user:password#proxyserver.internal:80"
Same thing for HTTPS_PROXY. While this worked on version 17, it doesn't seem to work with 19. Now the backslash seems to cause problems. Just remove it like this:
[Service]
Environment="HTTP_PROXY=http://user:password#proxyserver.internal:80"
How to check if this is a problem
I'm not sure if this changed with version 19 or already in version 18, since we skipped 18. But if you upgrade to 18 or 19 this is a thing i'd check. There is a simply way to figure it out:
docker info | grep -i proxy
If you see censored credentials like this
HTTP Proxy: http://xxxxx:xxxxx#proxyserver.internal:80
HTTPS Proxy: http://xxxxx:xxxxx#proxyserver.internal:80
then you're not affected of this issue. But if you see the plain credentials, Docker can't parse them because of the backslash or maybe other special characters included in your env variable.
The timeout in your last configuration is caused by the fact that you're not getting through the proxy to those external DNS servers (8.8.8.8 - 8.8.4.4), I think.
You should be solving the first issue, being the server misbehaving. As was the case with me, mentioned here, this was caused by the unability of docker to authenticate with the proxy. My solution was to use cntml.
The cntlm configuration is actually really straightforward if you follow their guidelines. When you have cntlm running, you need to configure docker to use that as a proxy instead of your corporate proxy. Just a plain proxy without authentication - most likely 127.0.0.1:3128, if you're running it on the same machine. cntlm will handle the authentication on the corporate proxy.
As a reference, this is the cntlm config I used:
Username <username>
Domain <domain>
Password <password>
PassLM <PassLM output of cntlm -H>
PassNT <PassNT output of cntlm -H>
PassNTLMv2 <PassNTLMv2 output of cntlm -H>
Proxy <corporate proxy>:<corporate proxy port>
NoProxy localhost, 127.0.0.*, 10.*, 192.168.*, 172.16.*.*
Listen 3128
You get the hashes by running cntlm -H -u <username>#<domain>.
Make sure you run cntlm in gateway mode cntlm -g (instead of cntlm -v).
Good luck!
I have accepted the above answer but, for an unknown reason, the problem reappeared after a few days with a slightly different error. Luckily I managed to solve it using a different setup, as written below. Hope it can help someone when the accepted answer does not work.
First of all, the condition where this error happens:
CNTLM listens to 127.0.0.1:3128,
docker proxy (set through the GUI) is 127.0.0.1:3128 both for HTTP and HTTPS
Error response from daemon: Get https://registry-1.docker.io/v2/: proxyconnect tcp: dial tcp 10.0.75.1:3128: connect: connection refused
I checked this similar case but the solution also did not work for me.
I tried several different things including turning off firewall, and reproducing the initial problem (my initial question) and redoing the accepted solution, to no avail. I realized that the IP address shown in the error is not my corporate proxy, nor the Cntlm-listened port, nor my localhost, but the IP of the dockerNAT.
Then, I also noticed that when running CNTLM -g -v, below the Cntlm ready, staying in the foreground line, nothing showed up when I run docker pull hello-world (in another terminal).
Inspired by this answer, I tried to change the Cntlm.ini and the proxy setting on docker to 10.0.75.1:3128, and then restarted cntlm and docker. Now things changed slightly. The error message changed to this:
Error response from daemon: Get https://registry-1.docker.io/v2/: Parent proxy unreacheable
and Cntlm terminal now showed something when I hit the docker pull command, indicating that it somehow works. I suspected that the proxy hostname might cause the problem at this stage, since docker might not be able to access DNS server from the VM. Then I changed Cntlm.ini again, changing the hostname of the proxy into its IP address, and voila, now docker pull hello-world works normally!
(TBH I don't fully understand the network theory behind why this solution works. If anyone can give some explanation, that would be helpful.)
I met the same problem with Windows 10 (Host OS) + VMware + Ubuntu.
In my case, the problem is caused by the company's firewall.
Just in case you might meet the same problem. I wrote an article about it:
Solve: Docker pull - "​... TLS handshake timeout"

ERROR: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout in Docker

I went through this link: Docker push - net/http: TLS handshake timeout, but it did not solved my issue. I am simply running the https://github.com/sqshq/PiggyMetrics using the docker-compose up command.
Status: Downloaded newer image for sqshq/piggymetrics-mongodb:latest
Pulling rabbitmq (rabbitmq:3-management)...
ERROR: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout
[root#ech-10-1XXX PiggyMetrics]#
[root#ech-10-1XXX PiggyMetrics]# docker-compose up
Pulling rabbitmq (rabbitmq:3-management)...
ERROR: Get https://registry-1.docker.io/v2/library/rabbitmq/manifests/3-management: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Frabbitmq%3Apull&service=registry.docker.io: net/http: TLS handshake timeout
Deployed and run the code on
uname -a
Linux ech-10-XXXX 4.1.12-61.1.18.el7uek.x86_64 #2 SMP Fri Nov 4 15:48:30 PDT 2016 x86_64 x86_64 x86_64 GNU/Linux
I was facing the same error Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout because of slow internet connection.
Switching to a comparatively faster internet connection didn't fix my problem at first. Then I restarted docker and it worked.
$ sudo systemctl restart docker
The reason is the network policy in my area.You can change your mirror address and try, in my cases, I changed the mirror address and works.I am using macOS Catalina:
"registry-mirrors" : [
"https://dockerhub.azk8s.cn"
]
Hope this help you.
This most of the times happens when my internet connection is slow. Please check your internet connection and retry.
Try switching your internet connection.
If you are connected via WiFi try connecting with LAN.
Put debug: true under the docker-engine tab and restart the docker. This worked for me on MAC M1.
I was having same issue. It was fixed by resetting demon settings on Docker Desktop macOS Catalina. I hope It will work for you .
Possible Solutions
Check internet speed and connect to Faster Internet
Restart Docker
Reset Demon Settings
If your region is restricted by the Docker server's use proxy.
On windows, try restarting the docker daemon.
Then log in with your docker Id docker login in your terminal...
Worked for me.
On rhel, try
# docker login
Login with your Docker ID to push and pull images from Docker Hub.
If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: xxxx
Password: xxxx
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
It works fine.
sometimes you can pull a lot of images, normally you can pull 200 images for free every 6 hours
Don't ask me why this connection,
I think docker needs a connection for that.
Below steps Worked for me on mac Ventura 13.1:
Clean / Purge data — from Docker Dashboard
Reset to factory defaults — From docker dashboard
Restart Docker Desktop — from docker dashboard
In my case, there is an entry in the /etc/hosts which needs to be removed as it was pointing to wrong docker.io entry always.
Its silly though, took sometime to figure out it.

Docker: can't run hello-world. Windows 10

I'm a newbie in docker. I try to run
$ docker run hello-world
And I got this error:
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository docker.io/library/hello-world
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/hello-world/images. You may want to check your internet connection or if you are behind a proxy..
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Also I allowed all points for this app in firewall
screenshot
I ran into that issue while moving from mac to windows. I would recommend to check the following things:
How many network adapters do you have? Check if there are too many and if docker is using the correct one. In case you have too many - delete the one which is not being used
for some people the network protocol IP6 needed to be deactivated to get docker to talk to the internet
check your traffic on the network adapter - in case you are using hyper-v you need to make sure that the network adapter is allowed to use the one which is connected to the internet
I hope this gave you a notch into the right direction.
I resolved this issue on windows 10 by resetting the DNS server to use the Google DNS fixed address: 8.8.8.8 (docker documentation)
After installing the docker for windows, I got the error as below.
PS C:\Users<Username>> docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled (Client.Timeout exceeded while awaiting headers).
So made changes in docker > Settings > Resources > Network > updated docker subnet to
10.0.75.0/24.
It worked like charm after.

Resources