├── .gitattributes ├── Ansible Semaphore.yml ├── README.md ├── aapanel ├── adguard.yml ├── adguardhome-sync.yml ├── audiobookshelf.yml ├── bitwarden.yml ├── bookstack.yml ├── budibase.yml ├── changedetection ├── cloudflare-ddns.yml ├── cryptgeon.yml ├── dashdot.yml ├── deluge.yml ├── dozzle.yml ├── dupeGuru.yml ├── emby.yml ├── gitea.yml ├── glances.yml ├── guacamole.yml ├── heimdall.yml ├── homeassistant.yml ├── homepage.yml ├── humhub.yml ├── install-ubuntudocker.sh ├── jackett ├── joplin.yml ├── kanboard.yml ├── kms-server.yml ├── lazytainer.yml ├── littlelink-server.yml ├── nextcloud.yml ├── nginx-proxy-manager.yml ├── ntp-server.yml ├── ombi.yml ├── openssh-server.yml ├── openvpn-server.md ├── pihole.yml ├── plex.yml ├── portainer.yml ├── rancher.yml ├── snippetbox.yml ├── speedtest.yml ├── synology-dsm.yml ├── tailscale.yml ├── tautulli.yml ├── transmission.yml ├── trilium-notes.yml ├── unifi-controller.yml ├── uptime-kuma.yml ├── vscode-server.yml ├── watchtower.yml ├── wikijs.yml ├── wireGuard_easy.yml └── wireshark /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | -------------------------------------------------------------------------------- /Ansible Semaphore.yml: -------------------------------------------------------------------------------- 1 | --- 2 | services: 3 | # uncommenct this section and comment out the mysql section to use postgres instead of mysql 4 | #postgres: 5 | #restart: unless-stopped 6 | #ports: 7 | #- 5432:5432 8 | #image: postgres:14 9 | #hostname: postgres 10 | #volumes: 11 | # - semaphore-postgres:/var/lib/postgresql/data 12 | #environment: 13 | # POSTGRES_USER: semaphore 14 | # POSTGRES_PASSWORD: semaphore 15 | # POSTGRES_DATABASE: semaphore 16 | # comment this section out if you wish to use postgres 17 | mysql: 18 | restart: unless-stopped 19 | ports: 20 | - 3306:3306 21 | image: mysql:8.0 22 | hostname: mysql 23 | volumes: 24 | - semaphore-mysql:/var/lib/mysql 25 | environment: 26 | MYSQL_RANDOM_ROOT_PASSWORD: 'yes' 27 | MYSQL_DATABASE: semaphore 28 | MYSQL_USER: semaphore 29 | MYSQL_PASSWORD: semaphore 30 | semaphore: 31 | restart: unless-stopped 32 | ports: 33 | - 3000:3000 34 | image: semaphoreui/semaphore:latest 35 | environment: 36 | SEMAPHORE_DB_USER: semaphore 37 | SEMAPHORE_DB_PASS: semaphore 38 | SEMAPHORE_DB_HOST: mysql #change to postgres for postgres 39 | SEMAPHORE_DB_PORT: 3306 # change to 5432 for postgres 40 | SEMAPHORE_DB_DIALECT: mysql 41 | SEMAPHORE_DB: semaphore # change to semaphore?sslmode=disable for postgres 42 | SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/ 43 | SEMAPHORE_ADMIN_PASSWORD: changeme 44 | SEMAPHORE_ADMIN_NAME: admin 45 | SEMAPHORE_ADMIN_EMAIL: admin@localhost 46 | SEMAPHORE_ADMIN: admin 47 | SEMAPHORE_ACCESS_KEY_ENCRYPTION: gs72mPntFATGJs9qK0pQ0rKtfidlexiMjYCH9gWKhTU= 48 | SEMAPHORE_LDAP_ACTIVATED: 'no' # set to yes if you wish to use ldap 49 | SEMAPHORE_LDAP_HOST: dc01.local.example.com 50 | SEMAPHORE_LDAP_PORT: '636' 51 | SEMAPHORE_LDAP_NEEDTLS: 'yes' 52 | SEMAPHORE_LDAP_DN_BIND: 'uid=bind_user,cn=users,cn=accounts,dc=local,dc=shiftsystems,dc=net' 53 | SEMAPHORE_LDAP_PASSWORD: 'ldap_bind_account_password' 54 | SEMAPHORE_LDAP_DN_SEARCH: 'dc=local,dc=example,dc=com' 55 | SEMAPHORE_LDAP_SEARCH_FILTER: "(\u0026(uid=%s)(memberOf=cn=ipausers,cn=groups,cn=accounts,dc=local,dc=example,dc=com))" 56 | depends_on: 57 | - mysql #change to postgres for postgres 58 | volumes: 59 | semaphore-mysql: #switch to semaphore-postgres to use postgres -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-compose-templates 2 | A set of collections of docker-compose templates! 3 | ## 4 | Create Docker compose files from docker run commands using Composerize => https://www.composerize.com/ 5 | ## 6 | Configuring remote access with systemd unit file 7 |
Use the command sudo systemctl edit docker.service to open an override file for docker.service in a text editor.
 8 | ```
 9 | [Service]
10 | ExecStart=
11 | ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
12 | ```
13 | 
14 | 15 | `sudo systemctl restart docker.service` 16 | 17 | -------------------------------------------------------------------------------- /aapanel: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | aapanel: 4 | ports: 5 | - '8886:8888' 6 | - '22:21' 7 | - '443:443' 8 | - '80:80' 9 | - '889:888' 10 | volumes: 11 | - '~/website_data:/www/wwwroot' 12 | - '~/mysql_data:/www/server/data' 13 | - '~/vhost:/www/server/panel/vhost' 14 | image: 'aapanel/aapanel:lib' -------------------------------------------------------------------------------- /adguard.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2" 3 | services: 4 | adguardhome: 5 | image: adguard/adguardhome 6 | container_name: adguardhome 7 | ports: 8 | - 53:53/tcp 9 | - 53:53/udp 10 | - 784:784/udp 11 | - 853:853/tcp 12 | - 3000:3000/tcp 13 | - 83:80/tcp 14 | volumes: 15 | - :/opt/adguardhome/work 16 | - :/opt/adguardhome/conf -------------------------------------------------------------------------------- /adguardhome-sync.yml: -------------------------------------------------------------------------------- 1 | ---- 2 | version: "2.1" 3 | services: 4 | adguardhome-sync: 5 | image: lscr.io/linuxserver/adguardhome-sync:latest 6 | container_name: adguardhome-sync 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=America/New_York 11 | - CONFIGFILE=/config/adguardhome-sync.yaml #optional 12 | volumes: 13 | - /path/to/appdata/config:/config 14 | ports: 15 | - 8080:8080 16 | restart: unless-stopped -------------------------------------------------------------------------------- /audiobookshelf.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: '2' 3 | services: 4 | audiobookshelf: 5 | image: ghcr.io/advplyr/audiobookshelf:latest 6 | environment: 7 | - AUDIOBOOKSHELF_UID=998 #change to match your server 8 | - AUDIOBOOKSHELF_GID=100 #change to match your server 9 | ports: 10 | - 13378:80 #do not change :80 11 | volumes: 12 | - /path/to/location/AudioBookShelf/AudioBooks:/audiobooks #map to your serverlocations 13 | - /path/to/location/AudioBookShelf/Podcasts:/podcasts #map to your serverlocations 14 | - /path/to/location/AudioBookShelf/Config:/config #map to your serverlocations 15 | - /path/to/location/AudioBookShelf/MetaData:/metadata #map to your serverlocations -------------------------------------------------------------------------------- /bitwarden.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: '3' 3 | 4 | services: 5 | bitwarden: 6 | image: bitwardenrs/server 7 | restart: always 8 | ports: 9 | - 8000:80 10 | volumes: 11 | - ./bw-data:/data 12 | environment: 13 | WEBSOCKET_ENABLED: 'true' # Required to use websockets 14 | SIGNUPS_ALLOWED: 'true' # set to false to disable signups -------------------------------------------------------------------------------- /bookstack.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | 3 | services: 4 | bookstack-db: 5 | image: mariadb:10.9 6 | container_name: bookstack-db 7 | restart: unless-stopped 8 | volumes: 9 | - /etc/localtime:/etc/localtime:ro 10 | - /etc/timezone:/etc/timezone:ro 11 | - /var/docker/bookstack/database:/var/lib/mysql 12 | environment: 13 | - MYSQL_ROOT_PASSWORD=somepassword 14 | - MYSQL_DATABASE=bookstack 15 | - MYSQL_USER=someuser 16 | - MYSQL_PASSWORD=somepassword 17 | - MYSQL_INITDB_SKIP_TZINFO=1 18 | 19 | bookstack-app: 20 | image: ghcr.io/linuxserver/bookstack:v22.04 21 | container_name: bookstack-app 22 | restart: unless-stopped 23 | volumes: 24 | - /etc/localtime:/etc/localtime:ro 25 | - /etc/timezone:/etc/timezone:ro 26 | - /var/docker/bookstack/app:/config 27 | links: 28 | - bookstack-db 29 | environment: 30 | - DB_HOST=bookstack-db:3306 31 | - DB_DATABASE=bookstack 32 | - DB_USERNAME=someuser 33 | - DB_PASSWORD=somepassword 34 | ports: 35 | - 80:80 36 | -------------------------------------------------------------------------------- /budibase.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | budibase: 4 | container_name: budibase 5 | ports: 6 | - '10000:80' 7 | volumes: 8 | - '/volume1/docker/budibase:/data' 9 | restart: always 10 | image: budibase/budibase -------------------------------------------------------------------------------- /changedetection: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | changedetection: 5 | image: lscr.io/linuxserver/changedetection.io:latest 6 | container_name: changedetection 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Europe/London 11 | - BASE_URL= #optional 12 | volumes: 13 | - /path/to/appdata/config:/config 14 | ports: 15 | - 5000:5000 16 | restart: unless-stopped -------------------------------------------------------------------------------- /cloudflare-ddns.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | cloudflare-ddns: 5 | image: oznu/cloudflare-ddns 6 | container_name: cloudflare-ddns 7 | restart: unless-stopped 8 | environment: 9 | - API_KEY=${CF_API_KEY} 10 | - ZONE=${CF_ZONE} 11 | - SUBDOMAIN=${CF_SUBDOMAIN} -------------------------------------------------------------------------------- /cryptgeon.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | npm: 4 | image: 'jc21/nginx-proxy-manager:latest' 5 | restart: unless-stopped 6 | ports: 7 | - '80:80' 8 | - '81:81' 9 | - '443:443' 10 | volumes: 11 | - ./data:/data 12 | - ./letsencrypt:/etc/letsencrypt 13 | networks: 14 | nginxproxymanager_default: 15 | 16 | redis: 17 | image: redis:7-alpine 18 | networks: 19 | nginxproxymanager_default: 20 | 21 | 22 | cryptgeon: 23 | image: cupcakearmy/cryptgeon:latest 24 | depends_on: 25 | - redis 26 | environment: 27 | SIZE_LIMIT: 16 MiB 28 | ports: 29 | - 5000:5000 30 | networks: 31 | nginxproxymanager_default: 32 | 33 | 34 | networks: 35 | nginxproxymanager_default: 36 | external: false -------------------------------------------------------------------------------- /dashdot.yml: -------------------------------------------------------------------------------- 1 | version: '3.5' 2 | 3 | services: 4 | dash: 5 | image: mauricenino/dashdot:latest 6 | restart: unless-stopped 7 | environment: 8 | DASHDOT_ENABLE_CPU_TEMPS: 'true' 9 | privileged: true 10 | ports: 11 | - '80:3001' 12 | volumes: 13 | - /:/mnt/host:ro -------------------------------------------------------------------------------- /deluge.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | deluge: 5 | image: lscr.io/linuxserver/deluge:latest 6 | container_name: deluge 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Europe/London 11 | - DELUGE_LOGLEVEL=error #optional 12 | volumes: 13 | - /path/to/deluge/config:/config 14 | - /path/to/your/downloads:/downloads 15 | ports: 16 | - 8112:8112 17 | - 6881:6881 18 | - 6881:6881/udp 19 | restart: unless-stopped -------------------------------------------------------------------------------- /dozzle.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | dozzle: 4 | image: amir20/dozzle:latest 5 | container_name: dozzle 6 | ports: 7 | - 8888:8080 8 | volumes: 9 | - /var/run/docker.sock:/var/run/docker.sock -------------------------------------------------------------------------------- /dupeGuru.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | volumes: 4 | configs: 5 | trash: 6 | 7 | services: 8 | dupeguru: 9 | image: jlesage/dupeguru 10 | ports: 11 | - 5800:5800 12 | environment: 13 | - TZ=America/Denver 14 | - PUID=1026 15 | - PGID=100 16 | volumes: 17 | - configs:/config:rw 18 | - /path/to/storage/files:/storage:rw 19 | - trash:/trash:rw -------------------------------------------------------------------------------- /emby.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | emby: 5 | image: lscr.io/linuxserver/emby:latest 6 | container_name: emby 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Europe/London 11 | volumes: 12 | - /path/to/library:/config 13 | - /path/to/tvshows:/data/tvshows 14 | - /path/to/movies:/data/movies 15 | - /opt/vc/lib:/opt/vc/lib #optional 16 | ports: 17 | - 8096:8096 18 | - 8920:8920 #optional 19 | devices: 20 | - /dev/dri:/dev/dri #optional 21 | - /dev/vchiq:/dev/vchiq #optional 22 | - /dev/video10:/dev/video10 #optional 23 | - /dev/video11:/dev/video11 #optional 24 | - /dev/video12:/dev/video12 #optional 25 | restart: unless-stopped -------------------------------------------------------------------------------- /gitea.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | 3 | networks: 4 | gitea: 5 | external: false 6 | 7 | services: 8 | server: 9 | image: gitea/gitea:latest 10 | container_name: gitea 11 | environment: 12 | - USER_UID=998 13 | - USER_GID=100 14 | - GITEA__database__DB_TYPE=mysql 15 | - GITEA__database__HOST=db:3306 16 | - GITEA__database__NAME=gitea 17 | - GITEA__database__USER=gitea 18 | - GITEA__database__PASSWD=gitea 19 | restart: always 20 | networks: 21 | - gitea 22 | volumes: 23 | - /srv/confs/gitea:/data 24 | - /etc/timezone:/etc/timezone:ro 25 | - /etc/localtime:/etc/localtime:ro 26 | ports: 27 | - "3000:3000" 28 | - "2234:22" 29 | depends_on: 30 | - db 31 | 32 | db: 33 | image: mysql:5.7 34 | restart: always 35 | environment: 36 | - MYSQL_ROOT_PASSWORD=gitea 37 | - MYSQL_USER=gitea 38 | - MYSQL_PASSWORD=gitea 39 | - MYSQL_DATABASE=gitea 40 | networks: 41 | - gitea 42 | volumes: 43 | - /srv/databases/gitea/mysql:/var/lib/mysql -------------------------------------------------------------------------------- /glances.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | glances: 4 | restart: always 5 | ports: 6 | - '61208-61209:61208-61209' 7 | environment: 8 | - GLANCES_OPT=-w 9 | volumes: 10 | - '/var/run/docker.sock:/var/run/docker.sock:ro' 11 | pid: host 12 | image: 'nicolargo/glances:latest-full' -------------------------------------------------------------------------------- /guacamole.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | volumes: 4 | guacamoleconf: 5 | 6 | services: 7 | guacamole: 8 | image: oznu/guacamole 9 | container_name: guacamole 10 | volumes: 11 | - guacamoleconf:/config 12 | ports: 13 | - 8585:8080 #edit 8585 as necessary for your setup 14 | restart: unless-stopped -------------------------------------------------------------------------------- /heimdall.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | heimdall: 5 | image: lscr.io/linuxserver/heimdall:latest 6 | container_name: heimdall 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Europe/London 11 | volumes: 12 | - :/config 13 | ports: 14 | - 80:80 15 | - 443:443 16 | restart: unless-stopped 17 | -------------------------------------------------------------------------------- /homeassistant.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | 4 | volumes: 5 | homeassistant: 6 | 7 | services: 8 | homeassistant: 9 | image: homeassistant/home-assistant 10 | network_mode: "host" 11 | container_name: homeassistant 12 | volumes: 13 | - homeassistant:/config 14 | environment: 15 | - TZ=America/Denver 16 | ports: 17 | - 8123:8123 18 | restart: unless-stopped -------------------------------------------------------------------------------- /homepage.yml: -------------------------------------------------------------------------------- 1 | version: "3.3" 2 | services: 3 | homepage: 4 | image: ghcr.io/benphelps/homepage:latest 5 | container_name: homepage 6 | ports: 7 | - 3000:3000 8 | volumes: 9 | - /path/to/config:/app/config # Make sure your local config directory exists 10 | - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations 11 | #check https://github.com/benphelps/homepage/wiki !! -------------------------------------------------------------------------------- /humhub.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | volumes: 4 | HumHubConfig: 5 | HumHubUploads: 6 | HubHumModules: 7 | 8 | services: 9 | humhub: 10 | image: mriedmann/humhub:1.6.2 11 | links: 12 | - db:db 13 | ports: 14 | - 8484:80 15 | volumes: 16 | - HumHubConfig:/var/www/localhost/htdocs/protected/config 17 | - HumHubUploads:/var/www/localhost/htdocs/uploads 18 | - HumHubModules:/var/www/localhost/htdocs/protected/modules 19 | environment: 20 | HUMHUB_DB_USER: humhub 21 | HUMHUB_DB_PASSWORD: humhub 22 | 23 | db: 24 | image: mariadb:10.2 25 | environment: 26 | MYSQL_ROOT_PASSWORD: root 27 | MYSQL_DATABASE: humhub 28 | MYSQL_USER: humhub 29 | MYSQL_PASSWORD: humhub -------------------------------------------------------------------------------- /install-ubuntudocker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sudo apt-get install -y \ 3 | apt-transport-https \ 4 | ca-certificates \ 5 | curl \ 6 | software-properties-common 7 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 8 | sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" 9 | apt-cache policy docker-ce 10 | sudo apt-get update 11 | sudo apt install docker-ce -y 12 | sudo usermod -aG docker ${USER} 13 | sudo systemctl enable docker.service 14 | sudo systemctl enable containerd.service -------------------------------------------------------------------------------- /jackett: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | jackett: 5 | image: lscr.io/linuxserver/jackett:latest 6 | container_name: jackett 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Etc/UTC 11 | - AUTO_UPDATE=true #optional 12 | - RUN_OPTS= #optional 13 | volumes: 14 | - /path/to/data:/config 15 | - /path/to/blackhole:/downloads 16 | ports: 17 | - 9117:9117 18 | restart: unless-stopped 19 | -------------------------------------------------------------------------------- /joplin.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | services: 3 | db: 4 | image: postgres:13 5 | volumes: 6 | - /docker/joplin/postgres:/var/lib/postgresql/data 7 | ports: 8 | - "5432:5432" 9 | restart: unless-stopped 10 | environment: 11 | - POSTGRES_PASSWORD=somepassword 12 | - POSTGRES_USER=joplin 13 | - POSTGRES_DB=joplin 14 | app: 15 | image: joplin/server:latest 16 | depends_on: 17 | - db 18 | ports: 19 | - "22300:22300" 20 | restart: unless-stopped 21 | environment: 22 | - APP_PORT=22300 23 | - APP_BASE_URL=https://joplin.domain.lol 24 | - DB_CLIENT=pg 25 | - POSTGRES_PASSWORD=somepassword 26 | - POSTGRES_DATABASE=postgres 27 | - POSTGRES_USER=joplin 28 | - POSTGRES_PORT=5432 29 | - POSTGRES_HOST=db -------------------------------------------------------------------------------- /kanboard.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | db: 4 | image: mariadb:latest 5 | command: --default-authentication-plugin=mysql_native_password 6 | volumes: 7 | - /srv/Databases/Kanboard2:/var/lib/mysql 8 | environment: 9 | - MYSQL_ROOT_PASSWORD=UVxY26hNL4qmo 10 | - MYSQL_DATABASE=kanboard 11 | - MYSQL_USER=kanboard 12 | - MYSQL_PASSWORD=kanboard 13 | restart: always 14 | 15 | kanboard: 16 | image: kanboard/kanboard:latest 17 | ports: 18 | - 88:80 19 | volumes: 20 | - /srv/Configs/Kanboard2/kanboard_data:/var/www/app/data 21 | - /srv/Configs/Kanboard2/kanboard_plugins:/var/www/app/plugins 22 | - /srv/Configs/Kanboard2/kanboard_ssl:/etc/nginx/ssl 23 | environment: 24 | - DATABASE_HOST=db 25 | - DATABASE_USER=kanboard 26 | - DATABASE_PASSWORD=kanboard 27 | - DATABASE_NAME=kanboard 28 | depends_on: 29 | - db 30 | links: 31 | - db:db 32 | restart: always -------------------------------------------------------------------------------- /kms-server.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | kmsserver: 4 | ports: 5 | - '1688:1688' 6 | restart: always 7 | container_name: vlmcsd 8 | image: fr0zendark/kmsserver -------------------------------------------------------------------------------- /lazytainer.yml: -------------------------------------------------------------------------------- 1 | # With Lazytainer, you can have containers start up when you need them and then shut down after a specified amount of time after you're done using them! 2 | # Docker Compose Example 3 | 4 | version: "3" 5 | services: 6 | lazytainer3: 7 | container_name: lazytainer3 8 | image: ghcr.io/vmorganp/lazytainer:master 9 | environment: 10 | - PORT=8080, 3000 # comma separated list of ports...or just the one 11 | - LABEL=lazytainer3 # value of lazytainer.marker for other containers that lazytainer checks 12 | - TIMEOUT=15 # OPTIONAL number of seconds to let container idle 13 | - MINPACKETTHRESH=10 # OPTIONAL number of packets that must be recieved to keepalive/start container 14 | - POLLRATE=1 # OPTIONAL number of seconds to sleep between polls 15 | - VERBOSE=true # probably set this to false unless you're debugging or doing the initial demo 16 | ports: 17 | - 8080:8080 18 | - 3000:3000 19 | volumes: 20 | - /var/run/docker.sock:/var/run/docker.sock:ro 21 | 22 | youtube: 23 | container_name: youtube3 24 | image: modenaf360/youtube-dl-nas 25 | environment: 26 | - MY_ID=dbtech 27 | - MY_PW=password 28 | volumes: 29 | - /home/docker/YouTube:/downfolder 30 | network_mode: service:lazytainer3 31 | depends_on: 32 | - lazytainer3 # wait for lazytainer to start before starting 33 | labels: 34 | - "lazytainer.marker=lazytainer3" # required label to make it work 35 | 36 | taisun: 37 | image: linuxserver/taisun 38 | container_name: taisun3 39 | restart: unless-stopped 40 | network_mode: service:lazytainer3 41 | depends_on: 42 | - lazytainer3 43 | labels: 44 | - "lazytainer.marker=lazytainer3" 45 | volumes: 46 | - /var/run/docker.sock:/var/run/docker.sock -------------------------------------------------------------------------------- /littlelink-server.yml: -------------------------------------------------------------------------------- 1 | # Original GitHub: https://github.com/techno-tim/littlelink-server 2 | # Note: Just remove any of the lines for social media accounts you don't want to show up on your page. 3 | # A lightweight, open source, and self-hosted alternative to linktree in a Docker container from Techno Tim 4 | --- 5 | version: "3.0" 6 | services: 7 | littlelink-server: 8 | image: ghcr.io/techno-tim/littlelink-server:latest 9 | # dockerhub is also supported timothystewart6/littlelink-server 10 | # image: timothystewart6/littlelink-server:latest 11 | container_name: littlelink-server 12 | environment: 13 | - META_TITLE=Techno Tim 14 | - META_DESCRIPTION=Techno Tim Link page 15 | - META_AUTHOR=Techno Tim 16 | - META_KEYWORDS=HomeLab, CSS, HTML, Engineering 17 | - LANG=en 18 | - META_INDEX_STATUS=all 19 | - THEME=Dark 20 | - FAVICON_URL=https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_200x200.jpg 21 | - AVATAR_URL=https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_200x200.jpg 22 | - AVATAR_2X_URL=https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_400x400.jpg 23 | - AVATAR_ALT=Techno Tim Profile Pic 24 | - NAME=TechnoTim 25 | - BIO=Hey! Just a place where you can connect with me! 26 | - FOOTER=Thanks for stopping by! 27 | - GITHUB=https://github.com/timothystewart6 28 | - TWITTER=https://twitter.com/TechnoTimLive 29 | - INSTAGRAM=https://www.instagram.com/techno.tim 30 | - YOUTUBE=https://www.youtube.com/channel/UCOk-gHyjcWZNj3Br4oxwh0A 31 | - TWITCH=https://www.twitch.tv/technotim/ 32 | - DISCORD=https://l.technotim.live/discord 33 | - TIKTOK=https://www.tiktok.com/@technotim 34 | - KIT=https://kit.co/TechnoTim 35 | - FACEBOOK=https://facebook.com 36 | - FACEBOOK_MESSENGER=https://facebook.com 37 | - LINKED_IN=https://linkedin.com 38 | - PRODUCT_HUNT=https://www.producthunt.com/ 39 | - SNAPCHAT=https://www.snapchat.com/ 40 | - SPOTIFY=https://www.spotify.com/ 41 | - REDDIT=https://www.reddit.com/ 42 | - MEDIUM=https://medium.com 43 | - PINTEREST=https://www.pinterest.com/ 44 | - EMAIL=you@example.com 45 | - EMAIL_TEXT=Email Me! 46 | - EMAIL_ALT=you@example.com 47 | - EMAIL_ALT_TEXT=Email me! 48 | - SOUND_CLOUD=https://soundcloud.com 49 | - FIGMA=https://figma.com 50 | - TELEGRAM=https://telegram.org/ 51 | - TUMBLR=https://www.tumblr.com/ 52 | - STEAM=https://steamcommunity.com/ 53 | - VIMEO=https://vimeo.com/ 54 | - WORDPRESS=https://wordpress.com/ 55 | - GOODREADS=https://www.goodreads.com/ 56 | - SKOOB=https://www.skoob.com.br/ 57 | - LETTERBOXD=https://letterboxd.com/ 58 | - MASTODON=https://mastodon.social/ 59 | - MICRO_BLOG=https://micro.blog/ 60 | - WHATSAPP=https://www.whatsapp.com/ 61 | - STRAVA=https://www.strava.com/ 62 | - BUYMEACOFFEE=https://www.buymeacoffee.com/ 63 | - GITLAB=https://www.gitlab.com/ 64 | - PATREON=https://www.patreon.com/technotim 65 | - DEVTO=https://dev.to/ 66 | - UMAMI_WEBSITE_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 67 | - UMAMI_APP_URL=https://your-umami-app.com 68 | - BUTTON_ORDER=YOUTUBE,TWITCH,TWITTER,GITHUB,INSTAGRAM,DISCORD,FACEBOOK,TIKTOK,KIT,PATREON 69 | - PAYPAL=https://www.paypal.me/user 70 | - SLACK=https://slack.com/ 71 | - STACKOVERFLOW=https://stackoverflow.com/ 72 | - LASTFM=https://last.fm/ 73 | - GITEA=https://gitea.io/ 74 | - POLYWORK=https://www.polywork.com/ 75 | - SIGNAL=https://signal.org/ 76 | - UNTAPPD=https://untappd.com/ 77 | - BUTTON_TARGET=_blank 78 | - INSTANTGAMING=https://www.instant-gaming.com/ 79 | - OG_SITE_NAME=Techno Tim Live (OG) 80 | - OG_TITLE=Techno Tim (OG) 81 | - OG_DESCRIPTION=Techno Tim Link page (OG) 82 | - OG_URL=https://technotim.live/ 83 | - OG_IMAGE=https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_400x400.jpg 84 | - OG_IMAGE_WIDTH=400 85 | - OG_IMAGE_HEIGHT=400 86 | - TWITTER_CARD=summary_large_image 87 | - TWITTER_IMAGE=https://pbs.twimg.com/profile_images/1286144221217316864/qIAsKOpB_400x400.jpg 88 | - TWITTER_SITE=@TechnoTimLive 89 | - TWITTER_CREATOR=@TechnoTimLive 90 | ports: 91 | - 8080:3000 92 | restart: unless-stopped 93 | security_opt: 94 | - no-new-privileges:true -------------------------------------------------------------------------------- /nextcloud.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | nextcloud: 5 | image: lscr.io/linuxserver/nextcloud:latest 6 | container_name: nextcloud 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Europe/London 11 | volumes: 12 | - /path/to/appdata:/config 13 | - /path/to/data:/data 14 | ports: 15 | - 443:443 16 | restart: unless-stopped -------------------------------------------------------------------------------- /nginx-proxy-manager.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | app: 4 | image: 'jc21/nginx-proxy-manager:latest' 5 | restart: unless-stopped 6 | ports: 7 | # These ports are in format : 8 | - '80:80' # Public HTTP Port 9 | - '443:443' # Public HTTPS Port 10 | - '81:81' # Admin Web Port 11 | # Add any other Stream port you want to expose 12 | # - '21:21' # FTP 13 | environment: 14 | DB_MYSQL_HOST: "db" 15 | DB_MYSQL_PORT: 3306 16 | DB_MYSQL_USER: "npm" 17 | DB_MYSQL_PASSWORD: "npm" 18 | DB_MYSQL_NAME: "npm" 19 | # Uncomment this if IPv6 is not enabled on your host 20 | # DISABLE_IPV6: 'true' 21 | volumes: 22 | - ./data:/data 23 | - ./letsencrypt:/etc/letsencrypt 24 | depends_on: 25 | - db 26 | 27 | db: 28 | image: 'jc21/mariadb-aria:latest' 29 | restart: unless-stopped 30 | environment: 31 | MYSQL_ROOT_PASSWORD: 'npm' 32 | MYSQL_DATABASE: 'npm' 33 | MYSQL_USER: 'npm' 34 | MYSQL_PASSWORD: 'npm' 35 | volumes: 36 | - ./data/mysql:/var/lib/mysql -------------------------------------------------------------------------------- /ntp-server.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: '3' 3 | 4 | services: 5 | ntp-server: 6 | image: cturra/ntp 7 | container_name: ntp-server 8 | restart: unless-stopped 9 | ports: 10 | - 123/udp:123/udp 11 | environment: 12 | - NTP_SERVERS=${NTP_SERVERS} 13 | -------------------------------------------------------------------------------- /ombi.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | ombi: 5 | image: lscr.io/linuxserver/ombi:latest 6 | container_name: ombi 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Europe/London 11 | - BASE_URL=/ombi #optional 12 | volumes: 13 | - /path/to/appdata/config:/config 14 | ports: 15 | - 3579:3579 16 | restart: unless-stopped 17 | -------------------------------------------------------------------------------- /openssh-server.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | openssh-server: 5 | image: lscr.io/linuxserver/openssh-server:latest 6 | container_name: openssh-server 7 | hostname: openssh-server #optional 8 | environment: 9 | - PUID=1000 10 | - PGID=1000 11 | - TZ=Europe/London 12 | - PUBLIC_KEY=yourpublickey #optional 13 | - PUBLIC_KEY_FILE=/path/to/file #optional 14 | - PUBLIC_KEY_DIR=/path/to/directory/containing/_only_/pubkeys #optional 15 | - PUBLIC_KEY_URL=https://github.com/username.keys #optional 16 | - SUDO_ACCESS=false #optional 17 | - PASSWORD_ACCESS=false #optional 18 | - USER_PASSWORD=password #optional 19 | - USER_PASSWORD_FILE=/path/to/file #optional 20 | - USER_NAME=linuxserver.io #optional 21 | volumes: 22 | - /path/to/appdata/config:/config 23 | ports: 24 | - 2222:2222 25 | restart: unless-stopped -------------------------------------------------------------------------------- /openvpn-server.md: -------------------------------------------------------------------------------- 1 |
git clone https://github.com/kylemanna/docker-openvpn.git
2 | cd docker-openvpn && docker build -t open-vpn-server .
3 | mkdir vpn-data && touch vpn-data/vars
4 | docker run -v $PWD/vpn-data:/etc/openvpn --rm open-vpn-server ovpn_genconfig -u udp://IP_ADDRESS:1194
5 | docker run -v $PWD/vpn-data:/etc/openvpn --rm -it open-vpn-server ovpn_initpki
6 | docker run -v $PWD/vpn-data:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN open-vpn-server
7 | docker run -v $PWD/vpn-data:/etc/openvpn --rm -it open-vpn-server easyrsa build-client-full user nopass
8 | docker run -v $PWD/vpn-data:/etc/openvpn --rm open-vpn-server ovpn_getclient user > user.ovpn
-------------------------------------------------------------------------------- /pihole.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | 3 | # More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/ 4 | services: 5 | pihole: 6 | container_name: pihole 7 | image: pihole/pihole:latest 8 | # For DHCP it is recommended to remove these ports and instead add: network_mode: "host" 9 | ports: 10 | - "53:53/tcp" 11 | - "53:53/udp" 12 | - "67:67/udp" # Only required if you are using Pi-hole as your DHCP server 13 | - "80:80/tcp" 14 | environment: 15 | TZ: 'America/Chicago' 16 | # WEBPASSWORD: 'set a secure password here or it will be random' 17 | # Volumes store your data between container upgrades 18 | volumes: 19 | - './etc-pihole:/etc/pihole' 20 | - './etc-dnsmasq.d:/etc/dnsmasq.d' 21 | # https://github.com/pi-hole/docker-pi-hole#note-on-capabilities 22 | cap_add: 23 | - NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed 24 | restart: unless-stopped -------------------------------------------------------------------------------- /plex.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | plex: 5 | image: lscr.io/linuxserver/plex:latest 6 | container_name: plex 7 | network_mode: host 8 | environment: 9 | - PUID=1000 10 | - PGID=1000 11 | - VERSION=docker 12 | - PLEX_CLAIM= #optional 13 | volumes: 14 | - /path/to/library:/config 15 | - /path/to/tvseries:/tv 16 | - /path/to/movies:/movies 17 | restart: unless-stopped -------------------------------------------------------------------------------- /portainer.yml: -------------------------------------------------------------------------------- 1 | version: '3.9' 2 | 3 | services: 4 | portainer: 5 | image: portainer/portainer-ce:latest 6 | container_name: portainer 7 | restart: unless-stopped 8 | security_opt: 9 | - no-new-privileges:true 10 | volumes: 11 | - /etc/localtime:/etc/localtime:ro 12 | - /var/run/docker.sock:/var/run/docker.sock:ro 13 | - ./portainer-data:/data 14 | ports: 15 | - 9000:9000 -------------------------------------------------------------------------------- /rancher.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | rancher: 5 | image: rancher/rancher:latest 6 | restart: unless-stopped 7 | ports: 8 | - '443:443' 9 | - '80:80' 10 | volumes: 11 | - rancher-vol:/var/lib/rancher 12 | 13 | volumes: 14 | rancher-vol: -------------------------------------------------------------------------------- /snippetbox.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | snippet-box: 4 | container_name: snippetbox 5 | ports: 6 | - '5000:5000' 7 | volumes: 8 | - :/app/data' #map to wherever you want to map 9 | image: pawelmalak/snippet-box -------------------------------------------------------------------------------- /speedtest.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | speedtest: 4 | container_name: speedtest 5 | image: henrywhitaker3/speedtest-tracker 6 | ports: 7 | - 8765:80 8 | volumes: 9 | - :/config 10 | environment: 11 | - TZ=Europe/Bucharest 12 | - PGID=1000 13 | - PUID=1000 14 | - OOKLA_EULA_GDPR=true 15 | logging: 16 | driver: "json-file" 17 | options: 18 | max-file: "10" 19 | max-size: "200k" 20 | restart: unless-stopped 21 | network_mode: bridge -------------------------------------------------------------------------------- /synology-dsm.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | dsm: 4 | container_name: dsm 5 | image: kroese/virtual-dsm:latest 6 | environment: 7 | CPU_CORES: "1" 8 | DISK_SIZE: "700G" 9 | RAM_SIZE: "512M" 10 | devices: 11 | - /dev/kvm 12 | - /dev/vhost-net 13 | cap_add: 14 | - NET_ADMIN 15 | ports: 16 | - 5000:5000 17 | volumes: 18 | - /home/user/data:/storage 19 | restart: on-failure 20 | stop_grace_period: 1m -------------------------------------------------------------------------------- /tailscale.yml: -------------------------------------------------------------------------------- 1 | version: "2.4" 2 | services: 3 | tailscale: 4 | privileged: true 5 | hostname: tailscale # This will become the tailscale device name 6 | network_mode: "host" 7 | container_name: tailscale 8 | image: tailscale/tailscale:latest 9 | volumes: 10 | - "/opt/appdata/tailscale/var_lib:/var/lib" # State data will be stored in this directory 11 | - "/dev/net/tun:/dev/net/tun" # Required for tailscale to work 12 | cap_add: # Required for tailscale to work 13 | - net_admin 14 | - sys_module 15 | command: tailscaled 16 | restart: unless-stopped 17 | 18 | ## Info! 19 | # Make sure you are in the same directory as the docker-compose.yml file, and now we want to start up the container(s) by running the following in each directory: 20 | # docker-compose up -d 21 | # If you're in another directory, then you will need to specify the compose file with the -f argument. 22 | # docker-compose -f /opt/appdata/tailscale/docker-compose.yml up -d 23 | # Run the following to have the abilityfor your Host device to be the Exit Node 24 | # docker exec tailscale tailscale up --advertise-exit-node -------------------------------------------------------------------------------- /tautulli.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | tautulli: 5 | image: lscr.io/linuxserver/tautulli:latest 6 | container_name: tautulli 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Europe/London 11 | volumes: 12 | - :/config 13 | ports: 14 | - 8181:8181 15 | restart: unless-stopped 16 | -------------------------------------------------------------------------------- /transmission.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | transmission: 5 | image: lscr.io/linuxserver/transmission:latest 6 | container_name: transmission 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Europe/London 11 | - TRANSMISSION_WEB_HOME=/combustion-release/ #optional 12 | - USER=username #optional 13 | - PASS=password #optional 14 | - WHITELIST=iplist #optional 15 | - PEERPORT=peerport #optional 16 | - HOST_WHITELIST=dnsname list #optional 17 | volumes: 18 | - /path/to/data:/config 19 | - /path/to/downloads:/downloads 20 | - /path/to/watch/folder:/watch 21 | ports: 22 | - 9091:9091 23 | - 51413:51413 24 | - 51413:51413/udp 25 | restart: unless-stopped 26 | -------------------------------------------------------------------------------- /trilium-notes.yml: -------------------------------------------------------------------------------- 1 | version: '3.3' 2 | services: 3 | trilium: 4 | ports: 5 | - '8482:8080' 6 | volumes: 7 | - 'trilium-data:/home/node/trilium-data' 8 | image: 'zadam/trilium:latest' 9 | restart: always 10 | 11 | volumes: 12 | trilium-data: -------------------------------------------------------------------------------- /unifi-controller.yml: -------------------------------------------------------------------------------- 1 | version: "2.1" 2 | services: 3 | unifi-controller: 4 | image: lscr.io/linuxserver/unifi-controller:latest 5 | container_name: ubiquity-unifi 6 | environment: 7 | - PUID=1000 8 | - PGID=1000 9 | - MEM_LIMIT=1024 #optional 10 | - MEM_STARTUP=1024 #optional 11 | volumes: 12 | - :/config 13 | ports: 14 | - 8443:8443 15 | - 3478:3478/udp 16 | - 10001:10001/udp 17 | - 8080:8080 18 | - 1900:1900/udp #optional 19 | - 8843:8843 #optional 20 | - 8880:8880 #optional 21 | - 6789:6789 #optional 22 | - 5514:5514/udp #optional 23 | restart: unless-stopped -------------------------------------------------------------------------------- /uptime-kuma.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "3.1" 3 | 4 | services: 5 | uptime-kuma: 6 | image: louislam/uptime-kuma:1 7 | container_name: uptime 8 | volumes: 9 | - :/app/data 10 | - /var/run/docker.sock:/var/run/docker.sock 11 | ports: 12 | - 3002:3001 13 | restart: unless-stopped 14 | security_opt: 15 | - no-new-privileges:true -------------------------------------------------------------------------------- /vscode-server.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | code-server: 5 | image: lscr.io/linuxserver/code-server:latest 6 | container_name: code-server 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Europe/London 11 | - PASSWORD=password #optional 12 | - HASHED_PASSWORD= #optional 13 | - SUDO_PASSWORD=password #optional 14 | - SUDO_PASSWORD_HASH= #optional 15 | - PROXY_DOMAIN=code-server.my.domain #optional 16 | - DEFAULT_WORKSPACE=/config/workspace #optional 17 | volumes: 18 | - /path/to/appdata/config:/config 19 | ports: 20 | - 8443:8443 21 | restart: unless-stopped -------------------------------------------------------------------------------- /watchtower.yml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | services: 3 | watchtower: 4 | container_name: watchtower 5 | image: containrrr/watchtower 6 | restart: always 7 | command: --schedule "0 0 4 * * *" --cleanup 8 | volumes: 9 | - /var/run/docker.sock:/var/run/docker.sock 10 | environment: 11 | - TZ=${TZ} -------------------------------------------------------------------------------- /wikijs.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | wikijs: 5 | image: lscr.io/linuxserver/wikijs:latest 6 | container_name: wikijs 7 | environment: 8 | - PUID=1000 9 | - PGID=1000 10 | - TZ=Europe/London 11 | volumes: 12 | - :/config 13 | - :/data 14 | ports: 15 | - 3000:3000 16 | restart: unless-stopped -------------------------------------------------------------------------------- /wireGuard_easy.yml: -------------------------------------------------------------------------------- 1 | version: "3.8" 2 | services: 3 | wg-easy: 4 | environment: 5 | # ⚠️ Required: 6 | # Change this to your host's public address 7 | - WG_HOST=raspberrypi.local 8 | 9 | # Optional: 10 | # - PASSWORD=foobar123 11 | # - WG_PORT=51820 12 | # - WG_DEFAULT_ADDRESS=10.8.0.x 13 | # - WG_DEFAULT_DNS=1.1.1.1 14 | # - WG_MTU=1420 15 | # - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24 16 | # - WG_PRE_UP=echo "Pre Up" > /etc/wireguard/pre-up.txt 17 | # - WG_POST_UP=echo "Post Up" > /etc/wireguard/post-up.txt 18 | # - WG_PRE_DOWN=echo "Pre Down" > /etc/wireguard/pre-down.txt 19 | # - WG_POST_DOWN=echo "Post Down" > /etc/wireguard/post-down.txt 20 | 21 | image: weejewel/wg-easy 22 | container_name: wg-easy 23 | volumes: 24 | - .:/etc/wireguard 25 | ports: 26 | - "51820:51820/udp" 27 | - "51821:51821/tcp" 28 | restart: unless-stopped 29 | cap_add: 30 | - NET_ADMIN 31 | - SYS_MODULE 32 | sysctls: 33 | - net.ipv4.ip_forward=1 34 | - net.ipv4.conf.all.src_valid_mark=1 35 | 36 | # - please check https://github.com/WeeJeWel/wg-easy for more information and setup! -------------------------------------------------------------------------------- /wireshark: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2.1" 3 | services: 4 | wireshark: 5 | image: lscr.io/linuxserver/wireshark:latest 6 | container_name: wireshark 7 | cap_add: 8 | - NET_ADMIN 9 | security_opt: 10 | - seccomp:unconfined #optional 11 | network_mode: host 12 | environment: 13 | - PUID=1000 14 | - PGID=1000 15 | - TZ=Etc/UTC 16 | volumes: 17 | - /path/to/config:/config 18 | ports: 19 | - 3000:3000 #optional 20 | restart: unless-stopped --------------------------------------------------------------------------------