uek2wooF Posted April 1, 2020 Share Posted April 1, 2020 (edited) I have been trying to figure out how to add my own containers to Unraid and I couldn't find all the docs in one place. These instructions include creating a docker image, using your own docker registry instead of dockerhub, and incorporating your image into the private apps section of Community Apps where it can be installed and maintained like any other docker container. I hope this helps someone. The example used here is a QR code generator I made. It takes a string and when you submit the form it just shows the qrcode image in the browser. I use the letsencrypt docker to proxy to it. Set up your docker image. I just use a Dockerfile, I think docker-compose is the more modern way. Here is the Dockerfile: FROM node:12.9.1 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY server.js . EXPOSE 3016 CMD [ "node", "server.js" ] Here is package.json: { "name": "qrcode", "version": "1.0.0", "description": "", "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node server.js" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.17.1", "qrcode": "^1.4.4" } } Here is server.js: const express = require('express') const bodyParser = require('body-parser') const app = express() app.use(bodyParser.urlencoded({ extended: false })) const QRCode = require('qrcode') app.post('/qr/qrpost', (req, res) => { QRCode.toDataURL(req.body.qrstring, (err, image) => { const arr = image.split(/,/); const buf = Buffer.from(arr[1], 'base64'); res.set({ 'Content-Type': 'image/png'}); res.send(buf); }); }); app.listen(3016); Create a docker image for this: docker build -t yourname/qrcode . If you wanted to run it and test it you would do: docker run --net=yourprivatenet -h qrcode --name qrcode -d yourname/qrcode At this point you could just be done. The container will work fine, and you can see it in the Docker tab in Unraid. You just can't do much with it from there. I wanted to have my own containers controlled through the Unraid interface just like containers installed from Community Apps. If you continue make sure you get the container id from docker ps and then: docker stop $id && docker rm $id I wanted to maintain my own docker registry instead of using dockerhub. If your image is on dockerhub then you can skip this part: Save this xml into a file called registry.xml. (The icon is bogus, sorry. I am too lazy to put the right one.) <?xml version="1.0" encoding="utf-8"?> <Container> <Beta>False</Beta> <Category>HomeAutomation:</Category> <Date>2020-04-01</Date> <Changes> [b]1.APR.2020:[/b]Added[br] </Changes> <Support>https://docs.docker.com/registry/</Support> <Name>Docker Registry Docker</Name> <Description> The Registry is a stateless, highly scalable server side application that stores and lets you distribute Docker images.[br][br] This is the from the Docker team - I just created the template.[br][br] </Description> <Registry>https://docs.docker.com/registry/</Registry> <GitHub>https://github.com/</GitHub> <Repository>registry:2</Repository> <BindTime>true</BindTime> <Privileged>false</Privileged> <Networking> <Mode>bridge</Mode> <Publish> <Port> <HostPort>5000</HostPort> <ContainerPort>5000</ContainerPort> <Protocol>tcp</Protocol> </Port> </Publish> </Networking> <Data> <Volume> <HostDir>/mnt/cache/appdata/DockerRegistry</HostDir> <ContainerDir>/var/lib/registry</ContainerDir> <Mode>rw</Mode> </Volume> </Data> <Banner>http://i.imgur.com/zXpacAF.png</Banner> <Icon>http://i.imgur.com/zXpacAF.png</Icon> </Container> Create a directory on the usb stick that community apps will use (I'm actually not sure if this persists through reboots and Unraid upgrades): mkdir -p /boot/config/plugins/community.applications/private/myrepo Then copy that xml there: cp registry.xml /boot/config/plugins/community.applications/private/myrepo Now when you go to the Apps tab in Unraid you will see Private Apps on the left side. Install the registry you set up there with defaults. You can change the port from 5000 if you are already using it for something else. Just remember to change 5000 in later instructions to that port. Tag your qrcode (or whatever) image and push it to your registry: docker image tag yourname/qrcode localhost:5000/qrcode docker push localhost:5000/qrcode (I think it is probably safe to docker rmi $imageid to remove the image you created earlier since it is now in your own registry. I didn't test that yet.) In the rest of the instructions that is how you refer to the image. So if you had it uploaded to dockerhub it would be yourname/qrcode but if you have it in your own registry it would be localhost:5000/qrcode. Now you create an xml file for your app, qrcode.xml or whatever. Edit it for your app: (Again, the icon is bogus. Use a proper icon.) <?xml version="1.0" encoding="utf-8"?> <Container> <Beta>False</Beta> <Category>HomeAutomation:</Category> <Date>2020-04-01</Date> <Changes> [b]1.APR.2020:[/b]Added[br] </Changes> <Support>http://forums.unraid.net</Support> <Name>QRcode</Name> <Description> QRcode will take a string and return the QRcode image[br][br] QRcode will run on port 3016.[br][br] </Description> <Registry>http://unraid:5000/qrcode/</Registry> <GitHub>https://github.com/</GitHub> <Repository>localhost:5000/qrcode</Repository> <BindTime>true</BindTime> <Privileged>false</Privileged> <Networking> <Mode>bridge</Mode> <Publish> <Port> <HostPort>3016</HostPort> <ContainerPort>3016</ContainerPort> <Protocol>tcp</Protocol> </Port> </Publish> </Networking> <WebUI>http://[IP]:[PORT:3016]</WebUI> <Banner>http://i.imgur.com/zXpacAF.png</Banner> <Icon>http://i.imgur.com/zXpacAF.png</Icon> </Container> Copy that xml to where Community Apps can find it: cp qrcode.xml /boot/config/plugins/community.applications/private/myrepo Reload that tab. Install your app (set the network to your private net). Done. Whew. So much hassle, haha. Good luck! And I'm already back. I forgot, if you actually want to try out the qrcode app you will need this qrcode.html: <html><head></head><body> Enter string to qrencode:<br> <form action='/qr/qrpost' method='POST'> <input type='text' name='qrstring' id='qrstring'/> </form> </body></html> Copy that to your letsencrypt nginx document root: cp qrcode.html /mnt/user/appdata/letsencrypt/www And the qrcode.subfolder.conf location ^~ /qr/qrpost { include /config/nginx/proxy.conf; resolver 127.0.0.11 valid=30s; proxy_pass http://QRcode:3016; } Copy that to your letsencrypt nginx proxy-confs: cp qrcode.subfolder.conf /mnt/user/appdata/letsencrypt/nginx/proxy-confs And restart your letsencrypt docker. Go to yoursite.com/qrcode.html, type in some words and hit enter to submit. Voila! I apologize for any mistakes. Let me know so I can fix them. Edited April 3, 2020 by uek2wooF made first paragraph more descriptive. fixed port number 1 1 Quote Link to comment
uek2wooF Posted April 30, 2020 Author Share Posted April 30, 2020 So the question now is how to do updates to the app. I did a new image build with docker build, did the tag and push so it is in the repo, but I don't know what to do so it can be upgraded with community applications. Any ideas? Quote Link to comment
Kees Fluitman Posted September 15, 2022 Share Posted September 15, 2022 are you still working on figuring it out? Ive been wondering as well, since some apps just have badly updated containers in the CA. On 4/30/2020 at 7:04 AM, uek2wooF said: So the question now is how to do updates to the app. I did a new image build with docker build, did the tag and push so it is in the repo, but I don't know what to do so it can be upgraded with community applications. Any ideas? Quote Link to comment
Kilrah Posted September 15, 2022 Share Posted September 15, 2022 You don't need to do anything beyond pushing to the registry, CA will check that and offer the update. Quote Link to comment
uek2wooF Posted September 15, 2022 Author Share Posted September 15, 2022 3 hours ago, Kilrah said: You don't need to do anything beyond pushing to the registry, CA will check that and offer the update. Hmm. It just says version not available in the version column on the docker tab for my qrcode docker. Quote Link to comment
Kilrah Posted September 16, 2022 Share Posted September 16, 2022 Is your registry container running? Should just work. What happens if you switch the docker page to advanced and click force update? That'll pop the docker output so may give some hints about what goes wrong Notes for others reading this, the Docker registry is in CA, no (more?) need to make your own template for it. Quote Link to comment
uek2wooF Posted September 19, 2022 Author Share Posted September 19, 2022 I use the "DockerRegistryDocker" and yes it is running. After "force update" the commands run successfully and it says up-to-date, but then if I check for updates it says "not available" again. I am not sure what is going on behind the scenes so it is hard to troubleshoot this. When you say a template is not needed, are you talking about that registry.xml? Without it I don't get my repo in the private repositories in community apps (6.9.2). Quote Link to comment
Kilrah Posted September 19, 2022 Share Posted September 19, 2022 16 minutes ago, uek2wooF said: When you say a template is not needed, are you talking about that registry.xml? Without it I don't get my repo in the private repositories in community apps Correct. You would obviously want your qrcode.xml in there but registry isn't needed since it's available in CA, at least on 6.10. Quote Link to comment
mjeshurun Posted August 1 Share Posted August 1 Hi friends, I would like to install the new Adguard VPN Cli for Linux inside a docker container on my unraid server. https://github.com/AdguardTeam/AdGuardVPNCLI Is that possible? Hope someone can assist 🙏 Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.