DEV Community

Cover image for Host Docker Registry on a Synology NAS
Brendon Otto
Brendon Otto

Posted on

Host Docker Registry on a Synology NAS

Photo by Alex Cheung on Unsplash

Post originally appeared on brendonotto.com

I've been working on a project off and on that I wanted to host and run on my Synology NAS (I have a DS920+). The best way to host custom software on it is to run Docker images but I didn't want to push this to a public repo, I have a local server after all 😁.

Get Docker Repo image

This step is pretty simple, run the Docker Repository image on your NAS. It can be found searching the registry:

Synology Docker Registry search

Once the registry container is started we need to do two things, one on your machine creating your Docker images and one on the server (or NAS in my case)

Local changes

Open up your Docker Desktop client and navigate to Settings -> Docker Engine. On this screen we'll add a property to the JSON object for insecure-registries. It's an array of strings, below is an example:



"insecure-registries": [
    "192.168.1.123:9500"
]


Enter fullscreen mode Exit fullscreen mode

I'm running my registry on port 9500 so I'll need to specify it in the URL. Use the port you mapped when starting the container. Now that's done you should be able to push to that registry with:



docker image push 192.168.1.123:9500/{imageName}:{version}


Enter fullscreen mode Exit fullscreen mode

At this point you should have a running registry with an image in it!

Server / NAS Changes

This part gets a bit inception-y. We have to tell the NAS that there's an insecure registry we'd like to use to retrieve images from that it's hosting itself. This means SSH'ing into the Synology and updating a configuration file. Once SSH'd in we'll need to update /var/packages/Docker/etc/dockerd.json as sudo so that we can write the changes back to the file system. Once in this file is open (I use vi for quick changes like this) we can add an entry for the same property that we added client side: insecure-registries with the same array parameter with one value. What I found weird and is most likely a fluke is that I had to add the new entry into the correct alphabetically ordered location in the JSON object. It shouldn't matter but it did 🤷‍♂️.

Once the update is done to the file, save and close it. We'll need to restart the Docker service in order for it to recognize the change in configuration. You can do this two ways:



sudo systemctl restart pkgctl-Docker


Enter fullscreen mode Exit fullscreen mode

or



synopkgctl restart pkgctl-Docker


Enter fullscreen mode Exit fullscreen mode

The first one is standard systemd on Linux, the second one being Synology's command line tool for managing their packages.

Once this is done use a tool like Portainer or open the settings for the Docker view in your Synology dashboard and add your new repo!

Synology use local Docker Registry

Thanks for reading! ✌

Top comments (1)

Collapse
 
davestonehub profile image
Dave Stone

With DSM 7.2 Docker got renamed to "Container Manager", so a few things changed above. The directory in question is now:

/var/packages/ContainerManager/etc/dockerd.json

The contents of that file all seem to be on one line, but inserted into the one liner as

"insecure-registries": ["192.168.1.123:9500"]

at the end before the "}". Finally, the synopkgctl command no longer seems to support restart, so I had to stop then start

synopkgctl stop ContainerManager
synopkgctl start ContainerManager

Massive thanks for the article, not sure I would have solved without this.