Docker is destroying my machine! πŸ’₯



This content originally appeared on DEV Community and was authored by Jairo FernΓ‘ndez

Other possible titles for this post

β€œRTFM, oh boy…”
Buy a new laptop…
Saving Private Ryan, where are you daemon.json?

I need to reconsider the use of Docker on my Mac M1 Pro. With a small disk and 1000 programs 😅, everything is fine at least until I start Docker Desktop. I use a lot of images and experiments that I never finish because I’m a lazy person. I was looking for some solution because my machine is crying all the time, and I feel like a loser deleting files, running docker system prune, and deleting my 1 million node modules from unfinished projects…

I have an old machine that I just use to do some experiments or run Windows for specific tasks or problems. That machine has Ubuntu and Windows as a dual boot. Yes, it’s a Frankenstein, and I feel nostalgic about Ubuntu.

β€” Sheldon: β€œOh, Ubuntu!”

Image description

Ok, give me the 💩 solution. I installed Docker on Ubuntu, allowed remote connection, and overrode the Docker client host to point to my old machine, and voila!

Or at least, I thought it was really easy to do. I checked the internet and ChatGPT told me to edit /etc/docker/daemon.json on my Ubuntu machine and just put:

{
  "hosts": [
    "unix:///var/run/docker.sock",
    "tcp://0.0.0.0:2376"
  ]
}

Easy peasy…

Image description

No, that broke my Docker on Ubuntu (24.04 LTS).

After a couple of hours and going through a lot of tutorials, I found the documentation!! (Yes, RTFM) https://docs.docker.com/config/daemon/remote-access/ and finally understood why I couldn’t find the file. It was a misunderstanding of how Docker runs on the OS and the changes of Ubuntu to systemd.

For systemd we need to edit the service with sudo systemctl edit docker.service, as the documentation said, but, oh surprise, it didn’t work for me…

So, what happened was I needed to edit the service file directly:

sudo nano /lib/systemd/system/docker.service

And I commented out the lines containing ExecStart below [Service]:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375

I restarted the service with:

sudo systemctl daemon-reload
sudo systemctl restart docker.service

You need to confirm if port 2375 is accessible on your local network (this is another story; on my machine, it was available by default).

For now, that’s all on Ubuntu. Now, on the Mac, Docker doesn’t start on login, so when I run docker ps on the terminal, you’ll see:

docker ps      
Cannot connect to the Docker daemon at unix:///Users/your_user/.docker/run/docker.sock. Is the docker daemon running?

And that’s ok. Now for the magic:

export DOCKER_HOST=tcp://<UBUNTU_LOCAL_IP>:2375

Where UBUNTU_LOCAL_IP is the IP of your Ubuntu machine on the same network. Now, if you are on the same network:

docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

And that’s it! Enjoy! 🎉

Please consider the security consequences of using this over your local network.


This content originally appeared on DEV Community and was authored by Jairo FernΓ‘ndez