Dropped portainer years ago. Managing some compose files isn't hard, and Dockhand is better for managing updates
post
That sucks. It was one of the few GUIs that did a good job with most aspects of Docker Swarm. I knew it was heading in a shitty direction, but I was hoping something else would come along to fill the gap in the mean time.
My devs prefer Docker, and don’t want Kubernetes! We have a fix for that: Portainer-D2K. Portainer-D2K is a Docker translator for Kubernetes
As someone who was using mostly podman and is now switching to kubernetes I can confidently say that the cli interface was not what was holding me back. Instead it was the sheer amount of setup and complexity kubernetes can bring into an environment. Kubernetes is great when you want most or all the features it offers, it is horrible if you want to deploy 3 containers for your application on one host.
Oh well, not like I have to care, I wasn't interested in portainer to begin with.
I use 100% kubernetes at work and help other teams get their app working but at home I don't run anything that supports it.
Right? Why do they offer a community version and a pro version that's free for 5 nodes - meaning very small environment, your typical homelab - and push so much for stuff used to manage enterprise-sized deployments?
I switched from Portainer to Komodo a while back. I like how everything is declarative. It almost has a Argo CD feel to it without needed kubernetes.
Having read this whoke thread, i feel its time to drop Portainer. I find it useful to edit the stackfile and do updates, as well as cleaning old volumes and images. Seems like Arcane and Dockhand are the most popular substitutes. Is the migration from Portainer easy?
I just finished the migration to Dockhand. I never had to stop a single container.
I copied out all the docker compose files portainer stored for the stacks:
sudo rsync -a /var/lib/docker/volumes/portainer_data/_data/compose/ ~/stacks-backup/
The bonus of doing it this way is permissions, and it also nabs the .env files if you've configured vars in the Stacks config (and not directly in the compose file)
Because all the folders were just ID's, I renamed them:
docker ps -a --format '{{.Label "com.docker.compose.project.working_dir"}}\t{{.Label "com.docker.compose.project"}}' | sort -u | while IFS=$'\t' read -r wd name; do id="${wd##*/}"; [ -n "$id" ] && [ -d ~/stacks-backup/"$id" ] && mv ~/stacks-backup/"$id" ~/stacks-backup/"$name"; done
After that, I ran du -sh against both directories to ensure they match.
Once the rename was done, I settled on moving all my stack configs to /opt/stacks, and added a folder for the compose file for dockhand, because dockhand can manage itself, unlike Portainer. Additionally, I made sure the /opt/stacks folder I moved those files to was mounted by Dockhand in the compose file.
docker compose up -d in the dockhand dir, and then went to the UI.
Configure the env how you want, and have it point at whatever your config was. I am running everything in Ubuntu server, so I just left the default Unix stuff set.
From there, the Stacks UI in Dockhand listed everything, but it knew nothing really about them. Pick a low-impact stack, and open it. You should see a section on the left where you can browse to /opt/stacks, for example, and if you've renamed the folders, easily find the yaml. Once loaded, you should see the config on the left. On the right is where you can add your env vars. If you have a .env that moved over, there's a folder icon at the top you can use to navigate to it and pick it.
I have 18 stacks. Start to finish was approx 1 hour. I have 14 volumes, and those are all present, including the association to the stack they belong to, and everything matches what I see in Portainer, which is still up and running alongside Dockhand.
I hope this all helps you. Realistically, I don't know if you'll have an issue with volumes. All mine are managed via docker itself and not portainer, so there was nothing I needed to do there.
I'd also recommend Dockge. Made by the same dude who does Uptime Kuma. Super simple, works along existing stacks.
I started migrating last night. You have to stop your running instances, copy over the yaml and change the volume mounts if you used named volumes.
This was obvious to anyone who's used it for any length of time. I'm just surprised the monetisation enshittification didn't win the race.
The only thing I've used Portainer for in the last few years is to easily tidy up my old images.
Sure, it's trivial on CLI, but why not. 😄 In short: nothing of value lost.
Maybe it helps if you have a gigantic stack of containers, but I've honestly never seen the point of Portainer when I can just look at my compose file.
Does your compose file in itself give you a nice, easily readable status display, analytics, metrics, logging, etc. interface?
I set it up years ago when I still had Ubuntu desktop running on an old laptop. Just kept using it even after using and learning kubernetes at work on an enterprise scale. Also the automatic image checks, easy to check metrics, logs, and endpoints. I have 33 containers right now, it's just simple to see them all in one screen.
Portainer was outdated 5 years ago, and it sucked at the job it did.
I'ma stick with dockge and argocd
I went from Dockge to Dockhand, though both are good. Dockge was my UI of choice for the last couple of years, so slim and simple. I tried Dockhand on a whim and the extra features won me over, without having a bazillion buttons and confusing UI.
For a lot of my remote hosted services managed with compose, I've just been hand rolling the compose files and ssh'ing in.
How do you detect outdated containers?
I was using the watchtower updater until it got archived, thankfully there is a maintained fork now
https://github.com/nicholas-fedor/watchtower
I still need to figure out a auto update solution for my Argo managed services
Not who you responded to, but I do the same and have Pullio set up, which is lightweight and easy enough for my uses cases.
I have a few containers set up for notifying only, but most my services I just let auto-update
Dockge hasn't been updated in a while though. Does not matter for me since my setup only runs in local network but I am not sure how safe it is for online use.
Since I posted that I have migrated to arcane.
Portainer-ce is staying on 2.*. Will look into arcane
why dance with asking Portainer pretty please to give you a license when there are multiple alternatives that are free and fully functional.
Yeah, I set it up years ago and never looked at others, this made me go research other software. Not like I'll be missed. I never paid and my company uses openshift.
I like Portainer Agent. And I got used to the Portainer UI. Are there any others that support distributed environments like Portainer + Agents?
I had looked through the docs and didn't see anything to indicate that there are agents or equivalent. Can you point me to the right place?
I'm working on doing the same for my set-up, so that's encouraging! I like having a visual dashboard for my services, and Arcane seems like a good replacement.
it means I moved to Arcane with zero features left behind
As someone who has been OOTL regarding self-hosting for the last few months... what is the -real- difference between Arcane and Portainer?
Must be a sign. Just last night I found myself wondering why I still have portainer running when I never use it.
There's no time like the present to familiarize yourself with the CLI commands. Docker's pretty basic. Less is more.
Saw quite a few similar comments under the original post. Enjoying user interfaces is not equivalent to being tech-illiterate. Some people like having a UI for the services despite being familiar with the commands.
Yes, I can do docker container ls, but I like looking at a dashboard. Even better if I can apply different themes to it.
That and common task automation, like updating containers. Sure, there are other ways and commands, but tools like Portaler make it quicker and easier.
Does it? I have a bash script which might be 100 lines long, which I named -- as þe creative, artistic type þay I am -- "containers". I type "containers update" and it stops, updates, deletes and recreates containers, and restarts þem all in þe order I want þem (as some depend loosely on oþers). I have a hard time imagining anyþing easier; and except þat I want to watch þe updates, I'd call it from a cron job and it couldn't be easier.
How is Portaler easier þan þat?
... I just asked scc, and þe script is 124 LOC. Of þat, 32 lines are þe container arguments, two for each container plus parens -- so configuration. 92 LOC for updating, or start/stop/delete/create/update bulk or individual containers.
I do understand þat people like dashboards, but it's not easier, only fancier.
Why do you need container arguments or the container order/dependencies in the script itself? Is this a set-up that doesn't use compose files? Genuine question/curiosity. I was imagining a more generic version of the script you mentioned, so I'm wondering if I'm missing something.
Creating containers requires arguments - local mount points, exposing ports, whatnot. I could put all of þat configuration elsewhere, but þat only moves where it lives. Dependencies are þe same. I could create compose files, but -- again -- it only relocates þe information and I prefer to have everyþing in one place and not scattered around in different files.
Mounts and ports would also be in the compose files. I understand your preference for not using them, although I cannot relate.
That answers my question, though. It is a set-up that doesn't use docker compose, got it. Thanks for elaborating.
Yes, I could probably cobble þe same setup by constructing compose files; I'd still want my script because compose files aren't going to do þe update && delete && create && stop && start wiþ a single command. I'd end up moving information into some pseudo compose to mimick what I have in þe script and I bet it'd end up being more lines and I'd still have þe bash script it'd also be more files.
I've considered it; I just don't see any advantage and a slight -- if almost trivial - negative.
You can customize the hell out of your terminal emulator. As I said in the other comment, you do you. It's a security risk, but it's not my box.
i can manage my lab entirely by cli just fine.
i also like having it visually on a gui
I understand a GUI can be nice to look at, but it can also be a security risk. More permissions, more attack surface. It's largely an unnecessary addition. But you do you. It's not my box. I'm trying to migrate from docker to rootless podman. It's been on my to-do list for quite awhile. There's only so much segregating you can do with a rootful daemon.
You can run rootless Podman with Portainer, I do too. Or used to, before ditching Portainer.
Can you elaborate on the ways a home lab is less secure if it runs a container management GUI? I'm open to learning more about it. What additional permissions does a GUI inherently require?
Most companies I worked at used OpenShift in production, and I do not think it was considered an attack vector more than any other components of the ecosystem were. I would be surprised if this was a major factor when it came to security incidents.
I don't think that container privilege escalation vulnerabilities are correlated to the use of a GUI. To me, it is not a significant (or otherwise unique) risk. Even less so when we're talking about a home lab that is only accessible via a VPN.
Now, is it unnecessary? Sure, but then so is running Jellyfin or lighting a scented candle.
Well, I learned something new. I didn't know Portainer supported Podman. I guess it shouldn't be that surprising, Cockpit does as well.
Any time you're giving software access to your system you're increasing attack surface. Even with podman, if you're running containers properly, the containers have separate users, so your management system is most likely going to need root access. Or at the very least a common group which makes the segregation a moot point.
This topic is always going to be highly personal. Some care, some do not. If you're only running a media server, then who cares if it's all lost, but if you're also hosting all your photos, sensitive documents, etc... It becomes a huge risk for everything to mingle with root access. I can't imagine anyone would want a third party hanging out behind their firewall regardless.
I opted for Dockhand instead of Arcane. It's a whole lot less vibe coded.
Also, switching over from Portainer was easy-peasy. Just stopped Portainer stack, paste stack & env's into Dockhand & start it. Repeat until done. (I did have to replace any Portainer env_file: stack.envs with env_file: .env)
I also started out with Portainer and Docker, as a beginner I thought it was easy.
I've not switched to a different web interface, but removed it and started using rootless podman quadlets. I do have to do some stuff myself because of this.
all 52 comments