<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Management on Nobody&#39;s Home</title>
    <link>https://cloud.nobodyhome.dev/tags/management/</link>
    <description>Recent content in Management on Nobody&#39;s Home</description>
    <generator>Hugo -- 0.163.0</generator>
    <language>en</language>
    <lastBuildDate>Sun, 12 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://cloud.nobodyhome.dev/tags/management/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Docker Permissions</title>
      <link>https://cloud.nobodyhome.dev/posts/docker-permissions/</link>
      <pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://cloud.nobodyhome.dev/posts/docker-permissions/</guid>
      <description>&lt;h3 id=&#34;references&#34;&gt;References:&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://man7.org/linux/man-pages/man7/capabilities.7.html&#34;&gt;Man Page&lt;/a&gt;
&lt;a href=&#34;https://rawcode7.medium.com/docker-container-security-tips-and-tricks-a4c94b9b28f1&#34;&gt;Jon Goldman&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://cloud.nobodyhome.dev/posts/install-docker/&#34;&gt;Install Docker Tutorial&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;docker-containers-can-do-too-much&#34;&gt;Docker Containers Can Do Too Much&lt;/h3&gt;
&lt;p&gt;Your containers can do too much. Look at all the capabilities a Docker container gets by default:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  - SYS_ADMIN
  - NET_ADMIN
  - NET_RAW
  - FOWNER
  - SETGID
  - SETUID
  - CHOWN
  - AUDIT_CONTROL
  - AUDIT_READ
  - AUDIT_WRITE
  - BLOCK_SUSPEND
  - BPF
  - CHECKPOINT_RESTORE
  - DAC_READ_SEARCH
  - DAC_OVERRIDE
  - FSETID
  - IPC_LOCK
  - KILL
  - LEASE
  - LINUX_IMMUTABLE
  - MAC_ADMIN
  - MAC_OVERRIDE
  - MKNOD
  - NET_ADMIN
  - NET_BIND_SERVICE
  - NET_BROADCAST
  - PERFMON
  - SETFCAP
  - SETPCAP
  - SYS_BOOT
  - SYS_CHROOT
  - SYS_NICE
  - SYS_PACCT
  - SYS_PTRACE
  - SYS_RAWIO
  - SYS_RESOURCE
  - SYS_TIME
  - SYS_TTY_CONFIG
  - SYSLOG
  - WAKE_ALARM
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This should &lt;strong&gt;clearly&lt;/strong&gt; be limited. Containers share functions of the host kernel, it&amp;rsquo;s how they cut down on overhead. Giving unecessary permissions violates the security principle of least privilege. So, how go about it?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dockhand</title>
      <link>https://cloud.nobodyhome.dev/posts/dockhand/</link>
      <pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://cloud.nobodyhome.dev/posts/dockhand/</guid>
      <description>&lt;h3 id=&#34;references&#34;&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=dwFktbtuTFQ&#34;&gt;TechHut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dockhand.pro/&#34;&gt;Dockhand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dockhand.pro/manual/&#34;&gt;Dockhand Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;dashboard&#34; loading=&#34;lazy&#34; src=&#34;https://cloud.nobodyhome.dev/assets/dockhand/dockhand-dashboard.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;setup&#34;&gt;Setup&lt;/h3&gt;
&lt;h4 id=&#34;docker-compose&#34;&gt;Docker Compose:&lt;/h4&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;services:
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    ports:
      - &amp;#34;3000:3000&amp;#34;
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
      - /home/mechanicus/Code/compose:/mnt/compose
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notes: using a separate data directory instead of a volume mount will make the container easier to manage and transfer if necessary&lt;/p&gt;
&lt;h4 id=&#34;adding-environments&#34;&gt;Adding Environments&lt;/h4&gt;
&lt;p&gt;My preferred method is to use the hawser connector:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d --name hawser --restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /home/mechanicus/code/docker-compose/:/mnt/compose \
-p 2376:2376 -e TOKEN==[SECURE TOKEN] \
ghcr.io/finsys/hawser:latest
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note: Include the location of compose files for easier management&lt;/p&gt;</description>
    </item>
    <item>
      <title>Portainer</title>
      <link>https://cloud.nobodyhome.dev/posts/portainer/</link>
      <pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://cloud.nobodyhome.dev/posts/portainer/</guid>
      <description>&lt;h3 id=&#34;description&#34;&gt;Description&lt;/h3&gt;
&lt;p&gt;Portainer is a web-based Docker management interface that allows users to easily manage their Docker containers, networks, and volumes. It provides a simple and intuitive way to view and interact with your Docker environment.&lt;/p&gt;
&lt;h3 id=&#34;installation&#34;&gt;Installation&lt;/h3&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.nobodyhome.dev/posts/install-docker/&#34;&gt;Install Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Create the Portainer server database:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker volume create portainer_data
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Download and install Portainer-CE&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h4 id=&#34;things-ive-learned&#34;&gt;Things I&amp;rsquo;ve Learned&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;To update the container&amp;rsquo;s name in the yaml file, use the &lt;code&gt;container_name:&lt;/code&gt; variable&lt;/li&gt;
&lt;li&gt;If a stack is unable to be deleted, it&amp;rsquo;s likely because the &lt;code&gt;/var/lib/docker/volumes/portiner_data/_data/compose&lt;/code&gt; file is missing. You&amp;rsquo;ll have to recreate that numbered file and a docker-compose.yml in the directory in order to delete the stack.&lt;/li&gt;
&lt;li&gt;After Setup remove the 8000 port bind&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run -d -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;see-also&#34;&gt;See also:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Setup automatic updates with [[Watchtower]] or [[Shepherd]].&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;references&#34;&gt;References&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.portainer.io/start/install-ce/server/docker/linux&#34;&gt;Portainer-CE&lt;/a&gt;
&lt;a href=&#34;https://forums.docker.com/t/custom-container-name-for-docker-compose/48089/2&#34;&gt;Container Names&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shepherd</title>
      <link>https://cloud.nobodyhome.dev/posts/shepherd/</link>
      <pubDate>Sat, 06 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://cloud.nobodyhome.dev/posts/shepherd/</guid>
      <description>&lt;h4 id=&#34;references&#34;&gt;References:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/containrrr/shepherd/tree/master/examples&#34;&gt;Shepherd Docker Compose Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/containrrr/shepherd&#34;&gt;Shepherd Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hub.docker.com/r/containrrr/shepherd&#34;&gt;Shepherd on hub.docker.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;about&#34;&gt;About&lt;/h4&gt;
&lt;p&gt;Shepherd is a Docker swarm service for automatically updating your services whenever their base image is refreshed.&lt;/p&gt;
&lt;h4 id=&#34;variables&#34;&gt;Variables&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Default check time is every 5 minutes. Change this with the &lt;code&gt;SLEEP_TIME&lt;/code&gt; variable.&lt;/li&gt;
&lt;li&gt;Control which services aren&amp;rsquo;t updated with the &lt;code&gt;IGNORELIST_SERVICES&lt;/code&gt; variable. Ignored services should be in a space separated list of service names.&lt;/li&gt;
&lt;li&gt;As an alternative to ignore, use &lt;code&gt;FILTER_SERVICES&lt;/code&gt; to specify which services you want updated.&lt;/li&gt;
&lt;li&gt;Notifications can be enabled through the &lt;a href=&#34;https://github.com/djmaze/apprise-microservice&#34;&gt;appraise micro service&lt;/a&gt; and the &lt;code&gt;APPRISE_SIDECAR_URL&lt;/code&gt; variable.&lt;/li&gt;
&lt;li&gt;Set the timezone with the &lt;code&gt;TZ&lt;/code&gt; variable. Note, do not include quotations for the timezone.&lt;/li&gt;
&lt;li&gt;Clean up old services with &lt;code&gt;IMAGE_AUTOCLEAN_LIMIT&lt;/code&gt;, the variable set keeps that number of old images.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;setup&#34;&gt;Setup:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Docker Compose&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;version: &amp;#34;3&amp;#34;

services:
  app:
    image: containrrr/shepherd
    environment:
      APPRISE_SIDECAR_URL: notify:5000
      TZ: Pacific/Honolulu
      IMAGE_AUTOCLEAN_LIMIT: 2
      SLEEP_TIME: &amp;#39;360m&amp;#39;
      FILTER_SERVICES: &amp;#34;label=shepherd.autodeploy&amp;#34;
      VERBOSE: &amp;#39;true&amp;#39;
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - notification
    deploy:
      placement:
        constraints:
          - node.role == manager

  notify:
    image: mazzolino/apprise-microservice:latest
    environment:
      NOTIFICATION_URLS: discord:[add your URL here]
    networks:
      - notification

networks:
  notification:
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Docker Run&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker service create --name shepherd --constraint &amp;#34;node.role==manager&amp;#34; --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock,ro containrrr/shepherd
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;notes&#34;&gt;Notes:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Notifications runs through the &lt;a href=&#34;https://github.com/djmaze/apprise-microservice/tree/master&#34;&gt;apprise microservice&lt;/a&gt; which runs on &lt;a href=&#34;https://github.com/caronc/apprise&#34;&gt;Apprise&lt;/a&gt;. The format for discord notifications is: &lt;code&gt;discord://webhook_id/webhook_token&lt;/code&gt; or &lt;code&gt;discord://avatar@webhook_id/webhook_token&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
