I’m currently trying to install Docker on my old Raspberry Pi (3 Model B+) to host some personal projects. When I run docker run hello-world
, I get:
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/library/hello-world/manifests/sha256:ec153840d1e635ac434fab5e377081f17e0e15afab27beb3f726c3265039cfff": dial tcp [2600:1f18:2148:bc00:eff:d3ae:b836:fa07]:443: connect: network is unreachable
My Internet connection does not support IPv6 at all, which would explain why this error occurs. But how do I force docker-pull
to only use IPv4?
Docker is a distraction in your problem description.
It’s like if you asked why the top gear in your car isn’t working and gave the model of car and engine type and gearbox. But it’s really that you’re stuck in slow traffic. Focus on the road name and destination to find a faster route.
For your problem, search for how to disable ipv6 for the Linux distribution and version that you have installed. You will find lots of guidance. Or share those details here for someone to help.
Or, better might be to see if there is a way to get ipv6 tunneling working on your connection. It may be possible even if the ISP is unhelpful.
Except if I try and access the same domain using curl, it works fine. For some reason, Docker specifically is what’s failing.
Different programs have different defaults.
But in your situation which would be more helpful - prevent this one docker command from using ipv6 (likely more difficult), or preventing all commands from using your broken ipv6 config (likely easier)?
I have no idea about the first. Maybe some people know this detail. But I’m sure that with a distro and version that you’re running, there are lots of people who could help with the second. Raspberry Pi 3B+ is the hardware. What software are you using?
Whatever the latest version of Raspbian was a month or two ago when I installed it.
uname -a
outputs[...]6.12.25+rpt-rpi-v8[...]
./etc/os-release
contains “Debian GNU/Linux 12 (bookworm)”.Ok, so it’s probably using NetworkManager. I would try disabling it in /etc/NetworkManager/NetworkManager.conf by adding a block like:
[ipv6] addr-gen-mode=stable-privacy method=disabled
Then
sudo systemctl restart NetworkManager
. Can’t say for sure if this will work. I dislike using NetworkManager on my servers so I can’t test if this works. But hopefully the before/after ofip addr
is different.Although it looks like your
ip addr
output posted an hour or so ago doesn’t show any ipv6 addressing. Maybe the problem is solved now.Unfortunately not.
docker run hello-world Unable to find image 'hello-world:latest' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/library/hello-world/manifests/sha256:ec153840d1e635ac434fab5e377081f17e0e15afab27beb3f726c3265039cfff": dial tcp [2600:1f18:2148:bc00:eff:d3ae:b836:fa07]:443: connect: network is unreachable Run 'docker run --help' for more information
Well crap. Do you have no ipv6 address now in
ip addr
?Guess I gave Docker too much benefit of the doubt and assumed it should failover to v4 once v6 was disabled. Bad assumption on my part.
Could it be a DNS problem? If you
dig registry-1.docker.io +short
does it return an ipv4 or v6 address?It looks like there have been sporadic reports of problems from people since last year.
Try adding
{"ipv6": false}
to your/etc/docker/daemon.json
file (create it if it doesnt exist), then restart docker withsudo systemctl restart docker
- this forces docker to use IPv4 only.This flag seems to only disable ipv6 on the default Docker bridge network, not daemon-wide. At least per this discussion.
Just comparing it by eye, there’s no change.
zag@raspberrypi:~ $ man dig No manual entry for dig zag@raspberrypi:~ $ which dig zag@raspberrypi:~ $ sudo apt install dig Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package dig
But if I ping it
It’s in the dnsutils package.