<?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>Container on Nobody&#39;s Home</title>
    <link>https://new.cloud.nobodyhome.dev/tags/container/</link>
    <description>Recent content in Container on Nobody&#39;s Home</description>
    <generator>Hugo -- 0.154.5</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 12 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://new.cloud.nobodyhome.dev/tags/container/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Docker Permissions</title>
      <link>https://new.cloud.nobodyhome.dev/posts/docker-permissions/</link>
      <pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://new.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;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://new.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://new.cloud.nobodyhome.dev/posts/dockhand/</link>
      <pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://new.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://new.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>Tor Site</title>
      <link>https://new.cloud.nobodyhome.dev/posts/tor-hidden-services/</link>
      <pubDate>Sat, 13 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/tor-hidden-services/</guid>
      <description>&lt;h3 id=&#34;directory-setup&#34;&gt;Directory Setup&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Set up the files and directories:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir -p tor-site/keys tor-site/html tor-site/logs
touch tor-site/torrc
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Set permissions:
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;chmod 700 tor-site/keys 
chmod 600 tor-site/logs
sudo chown root:root tor-site/keys tor-site/logs
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;content-setup&#34;&gt;Content Setup&lt;/h3&gt;
&lt;p&gt;Add the files for your website into the &lt;code&gt;tor-site/html&lt;/code&gt; folder:
example:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Hello from the Onion Router!&amp;lt;/h1&amp;gt;
    &amp;lt;p&amp;gt;This site is hosted inside Docker.&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;docker-setup&#34;&gt;Docker Setup&lt;/h3&gt;
&lt;p&gt;[[Install Docker]]
Docker  Compose File
&lt;code&gt;compose.yaml&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;services:
  nginx:
    container_name: nginx
    image: nginx
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    volumes:
      - ./html:/usr/share/nginx/html:ro
      - ./logs:/var/log/nginx
    networks:
      - tor_network
  tor:
    container_name: tor
    volumes:
      - ./torrc:/etc/tor/torrc:ro
      - ./keys:/var/lib/tor/hidden_service/
    image: alpine:latest
    entrypoint: sh -c &amp;#34;apk add --no-cache tor &amp;amp;&amp;amp; tor -f /etc/tor/torrc&amp;#34;
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    networks:
      - tor_network
    depends_on:
      - nginx

networks:
  tor_network:
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nginx&lt;/code&gt; is the name of your web server container - this is important for the &lt;code&gt;torrc&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:ro&lt;/code&gt; sets the volume to read only&lt;/li&gt;
&lt;li&gt;&lt;code&gt;networks: tor_network&lt;/code&gt; means all the traffic stays inside the tor network&lt;/li&gt;
&lt;li&gt;&lt;code&gt;security_opt: - no-new-privileges:true&lt;/code&gt;  prevents the user from running as root through &lt;code&gt;setuid&lt;/code&gt; or &lt;code&gt;setgid &lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cap_drop: -All&lt;/code&gt; removes all default Linux capabilities granted to a container&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cap_add: - NET_BIND_SERVICE&lt;/code&gt; will allow tor to work with only the necessary capabilities&lt;/li&gt;
&lt;li&gt;&lt;code&gt;networks&lt;/code&gt; ensures that all traffic stays inside the docker network with a custom bridge &lt;code&gt;tor_network&lt;/code&gt; to access the tor relays
See &lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/docker-permissions/&#34;&gt;Docker Permissions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;create-torrc&#34;&gt;Create &lt;code&gt;torrc&lt;/code&gt;:&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Standard Tor config
DataDirectory /var/lib/tor

# Define the Hidden Service
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 nginx:80
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;note: the name &lt;code&gt;nginx&lt;/code&gt; should be the same as you name your web server container in the &lt;code&gt;compose.yaml&lt;/code&gt; (see [[#Docker Setup]]).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;notes&#34;&gt;Notes:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Did you know you can make a custom tor site name? See the &lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/named-tor-site/&#34;&gt;Named Tor Site&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The docker service setup:
&lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/dockhand/&#34;&gt;Dockhand&lt;/a&gt;
&lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/portainer/&#34;&gt;Portainer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;
services:
  nginx:
    container_name: nginx
    image: nginx
    volumes:
      - /home/mechanicus/code/tor-site/html:/usr/share/nginx/html:ro
      - /home/mechanicus/code/tor-site/logs:/var/log/nginx
    networks:
      - tor_network
    deploy: 
      mode: replicated
      replicas: 1
    labels:
      - &amp;#34;com.centurylinklabs.watchtower.enable=true&amp;#34;
      - &amp;#34;label=shepherd.autodeploy=true&amp;#34;
  tor:
    container_name: tor
    volumes:
      - /home/mechanicus/code/tor-site/torrc:/etc/tor/torrc:ro
      - /home/mechanicus/code/tor-site/keys:/var/lib/tor/hidden_service/
    image: alpine:latest
    entrypoint: sh -c &amp;#34;apk add --no-cache tor &amp;amp;&amp;amp; tor -f /etc/tor/torrc&amp;#34;
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    networks:
      - tor_network
    depends_on:
      - nginx
    deploy: 
      mode: replicated
      replicas: 1
    labels:
      - &amp;#34;com.centurylinklabs.watchtower.enable=true&amp;#34;
      - &amp;#34;label=shepherd.autodeploy=true&amp;#34;

networks:
  tor_network:
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Portainer</title>
      <link>https://new.cloud.nobodyhome.dev/posts/portainer/</link>
      <pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://new.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://new.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://new.cloud.nobodyhome.dev/posts/shepherd/</link>
      <pubDate>Sat, 06 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://new.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>
    <item>
      <title>Watchtower</title>
      <link>https://new.cloud.nobodyhome.dev/posts/watchtower/</link>
      <pubDate>Sat, 06 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/watchtower/</guid>
      <description>&lt;h4 id=&#34;references&#34;&gt;References&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://containrrr.dev/watchtower/&#34;&gt;Watchtower Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://containrrr.dev/watchtower/notifications/&#34;&gt;Watchtower Notifications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.smarthomebeginner.com/watchtower-docker-compose-2024/&#34;&gt;Watchtower Configuration - smarthomebeginner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/containrrr/watchtower/blob/main/docker-compose.yml&#34;&gt;Watchtower Docker Compose Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://containrrr.dev/watchtower/arguments/&#34;&gt;All Arguments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/selfhosted/comments/18kzbie/watchtower_notifications_via_shoutrrr_howto/&#34;&gt;A Good Reddit Thread&lt;/a&gt;\&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linuxiac.com/watchtower-automatically-update-docker-container-images/&#34;&gt;A Tutorial&lt;/a&gt;&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:
  watchtower:
    image: nickfedor/watchtower
    container_name: watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
#      - WATCHTOWER_LABEL_ENABLE=true 
      - WATCHTOWER_NOTIFICATIONS=shoutrrr
      - WATCHTOWER_NOTIFICATION_URL=discord:[add discord url]
      - WATCHTOWER_POLL_INTERVAL=21600
      - WATCHTOWER_CLEANUP=true
#    labels:
#      - &amp;#34;com.centurylinklabs.watchtower.enable=true&amp;#34;
    command: homepage portainer
    hostname: watchtower
    restart: unless-stopped
    deploy: 
      mode: global
&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 run -d --name watchtower --volume /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower [NAMES OF THE CONTAINERS TO UPDATE]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;notes&#34;&gt;Notes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Watchtower does not work with docker swarms, for that use case see &lt;a href=&#34;https://new.cloud.nobodyhome.dev/posts/shepherd/&#34;&gt;Shepherd&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Cloudflare Tunnel</title>
      <link>https://new.cloud.nobodyhome.dev/posts/cloudflare-service/</link>
      <pubDate>Thu, 04 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://new.cloud.nobodyhome.dev/posts/cloudflare-service/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;250&#34; loading=&#34;lazy&#34; src=&#34;https://upload.wikimedia.org/wikipedia/commons/4/4b/Cloudflare_Logo.svg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;links&#34;&gt;Links&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://dash.cloudflare.com/&#34;&gt;dash.cloudflare.com&lt;/a&gt;
&lt;a href=&#34;https://one.dash.cloudflare.com&#34;&gt;one.dash.cloudflare.com&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;installing-the-service&#34;&gt;Installing the service&lt;/h3&gt;
&lt;h5 id=&#34;ubuntu&#34;&gt;Ubuntu&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb &amp;amp;&amp;amp; 

sudo dpkg -i cloudflared.deb &amp;amp;&amp;amp; 

sudo cloudflared service install [TUNNEL KEY]
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;red-hat&#34;&gt;Red Hat&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -L --output cloudflared.rpm https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm &amp;amp;&amp;amp; 

sudo yum localinstall -y cloudflared.rpm &amp;amp;&amp;amp; 

sudo cloudflared service install [TUNNEL KEY]
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;docker&#34;&gt;Docker&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token [TUNNEL KEY]
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;docker-compose&#34;&gt;Docker Compose&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;version: &amp;#34;3.8&amp;#34;

services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    restart: unless-stopped
    command: tunnel run
    network_mode: host
    environment:
      - &amp;#34;TUNNEL_TOKEN=[TUNNEL KEY]&amp;#34;
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;cloudflare-as-a-docker-sidecar&#34;&gt;Cloudflare as a Docker Sidecar&lt;/h4&gt;
&lt;p&gt;Cloudflare can serve ports from other docker containers without actually exposing the container ports on the host device. See the compose example below:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
