Project One-Click: All-in-One Installations of Docker Extensions and CDVR Custom Channels

Could you hover over the local environment (as shown in the linked post screenshot) and let me know the environment number shown?

Where are you seeing this error? Are you seeing this in Standard Output or Standard Error? Does a Plex stack exist in Portainer?

The error shows in the Standard Output; no stack is created in Portainer. Below is what I get for the Standard Error:

exit status 1

  • dvr=192.168.150.242:8089
    ++ basename /config/plex-for-channels.sh

  • extension=plex-for-channels.sh

  • extension=plex-for-channels

  • cp /config/plex-for-channels.env /tmp

  • envFile=/tmp/plex-for-channels.env

  • [[ -n 192.168.150.242 ]]

  • extensionURL=192.168.150.242:7779

  • regions=local

  • [[ false == \f\a\l\s\e ]]

  • mjhCompatibility=

  • [[ # == # ]]

  • cdvrStartingChannel=

  • [[ -n '' ]]

  • cdvrIgnoreM3UNumbers=

  • [[ -n '' ]]

  • curl -s -o /dev/null http://192.168.150.242:7779

  • envVars=("TAG=$2" "HOST_PORT=$3" "PORT=$4" "HOST_DIR=$7")

  • printf '%s\n' TAG=latest HOST_PORT=7779 PORT=7777 HOST_DIR=/Users/jasontrippe

  • sed -i /=#/d /tmp/plex-for-channels.env

  • /config/portainerstack.sh plex-for-channels

  • stackName=plex-for-channels

  • portainerHost=192.168.150.242

  • [[ -n 9443 ]]

  • portainerPort=9443

  • [[ -n '' ]]

  • portainerEnv=2

  • curl -s -o /dev/null http://192.168.150.242:9000

  • portainerURL='http://192.168.150.242:9000/api/stacks/create/standalone/string?endpointId=2'

  • portainerToken=ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=

  • cp /config/plex-for-channels.yaml /tmp

  • stackFile=/tmp/plex-for-channels.yaml

  • envFile=/tmp/plex-for-channels.env
    ++ grep DVR_SHARE= /tmp/plex-for-channels.env
    ++ grep -v /
    ++ awk -F= '{print $2}'

  • dockerVolume=
    ++ grep VOL_EXTERNAL= /tmp/plex-for-channels.env
    ++ grep -v '#'
    ++ awk -F= '{print $2}'

  • volumeExternal=
    ++ grep VOL_NAME= /tmp/plex-for-channels.env
    ++ grep -v '#'
    ++ awk -F= '{print $2}'

  • volumeName=
    ++ grep NETWORK_MODE= /tmp/plex-for-channels.env
    ++ grep -v '#'
    ++ awk -F= '{print $2}'

  • networkMode=
    ++ grep DEVICES= /tmp/plex-for-channels.env
    ++ grep -v '#'
    ++ awk -F= '{print $2}'

  • transcoderDevice=
    ++ grep CDVR_CONTAINER= /tmp/plex-for-channels.env
    ++ grep -v '#'
    ++ awk -F= '{print $2}'

  • stackNumber=

  • [[ -n '' ]]

  • [[ -n '' ]]

  • [[ -n '' ]]

  • [[ -n '' ]]
    ++ sed 's/\/\\/g' /tmp/plex-for-channels.yaml
    ++ sed 's/"/\"/g'
    ++ awk '{printf "%s\n", $0}'

  • stackContent='version: '''3.9'''\nservices:\n # 2025.02.26\n # GitHub home for this project with setup instructions: https://github.com/jgomez177/plex-for-channels\n # Docker container home for this project: https://ghcr.io/jgomez177/plex-for-channels\n plex-for-channels:\n image: ghcr.io/jgomez177/plex-for-channels:${TAG}\n container_name: plex-for-channels\n ports:\n - ${HOST_PORT}:${PORT}\n environment:\n - PORT=${PORT}\n volumes:\n - ${HOST_DIR}/plex:/app/data\n restart: unless-stopped\n\n # Default Environment variables can be found below under stderr -- copy and paste into Portainer-Stacks Environment variables section in Advanced mode\n'

  • stackEnvVars='['

  • IFS==

  • read -r key value

  • stackEnvVars='[{"name": "TAG", "value": "latest"},'

  • IFS==

  • read -r key value

  • stackEnvVars='[{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},'

  • IFS==

  • read -r key value

  • stackEnvVars='[{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PORT", "value": "7777"},'

  • IFS==

  • read -r key value

  • stackEnvVars='[{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PORT", "value": "7777"},{"name": "HOST_DIR", "value": "/Users/jasontrippe"},'

  • IFS==

  • read -r key value

  • stackEnvVars='[{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PORT", "value": "7777"},{"name": "HOST_DIR", "value": "/Users/jasontrippe"}]'
    ++ cat

  • stackJSON='{
    "Name": "plex-for-channels",
    "SwarmID": "",
    "StackFileContent": "version: '''3.9'''\nservices:\n # 2025.02.26\n # GitHub home for this project with setup instructions: https://github.com/jgomez177/plex-for-channels\n # Docker container home for this project: https://ghcr.io/jgomez177/plex-for-channels\n plex-for-channels:\n image: ghcr.io/jgomez177/plex-for-channels:${TAG}\n container_name: plex-for-channels\n ports:\n - ${HOST_PORT}:${PORT}\n environment:\n - PORT=${PORT}\n volumes:\n - ${HOST_DIR}/plex:/app/data\n restart: unless-stopped\n\n # Default Environment variables can be found below under stderr -- copy and paste into Portainer-Stacks Environment variables section in Advanced mode\n",
    "Env": [{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PORT", "value": "7777"},{"name": "HOST_DIR", "value": "/Users/jasontrippe"}]
    }'

  • echo 'JSON response from http://192.168.150.242:9000/api/stacks/create/standalone/string?endpointId=2:'
    ++ curl -k -X POST -H 'Content-Type: application/json' -H 'X-API-Key: ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' -d '{
    "Name": "plex-for-channels",
    "SwarmID": "",
    "StackFileContent": "version: '''3.9'''\nservices:\n # 2025.02.26\n # GitHub home for this project with setup instructions: https://github.com/jgomez177/plex-for-channels\n # Docker container home for this project: https://ghcr.io/jgomez177/plex-for-channels\n plex-for-channels:\n image: ghcr.io/jgomez177/plex-for-channels:${TAG}\n container_name: plex-for-channels\n ports:\n - ${HOST_PORT}:${PORT}\n environment:\n - PORT=${PORT}\n volumes:\n - ${HOST_DIR}/plex:/app/data\n restart: unless-stopped\n\n # Default Environment variables can be found below under stderr -- copy and paste into Portainer-Stacks Environment variables section in Advanced mode\n",
    "Env": [{"name": "TAG", "value": "latest"},{"name": "HOST_PORT", "value": "7779"},{"name": "PORT", "value": "7777"},{"name": "HOST_DIR", "value": "/Users/jasontrippe"}]
    }' 'http://192.168.150.242:9000/api/stacks/create/standalone/string?endpointId=2'
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed

    0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
    100 938 100 19 100 919 19000 897k --:--:-- --:--:-- --:--:-- 916k

  • portainerResponse='404 page not found'

  • [[ -z 404 page not found ]]

  • echo 404 page not found

  • echo '404 page not found'

  • jq -e '.Id != null'
    jq: error (at :1): Cannot index number with string "Id"
    parse error: Invalid numeric literal at line 1, column 9

  • exit 1

  • [[ 1 == 1 ]]

  • exit 1

Could you please run the OliveTIn Post-Install Healthcheck again, and post the results here?

Don't forget to use 3 backticks before and after log blocks like these in your posts, to improve readability.

image

Similar to the user in the post I linked, your Portainer "Environment" ID has changed from 2 to 3 -- I'm still trying to figure out how that can happen (it's probably something Portainer is doing in the latest update). However, I've created a new env var to deal with it. Check post #1 in this thread, for the latest OliveTin Docker Compose, and be sure to use 3 for PORTAINER_ENV:

PORTAINER_ENV=3

See below:

Standard Output
Checking your OliveTin-for-Channels installation...
(extended_check=false)

Version 2025.03.05


Checking that your selected Channels DVR server (192.168.150.242:8089) is reachable by URL:
HTTP Status: 200 indicates success...

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1276 100 1276 0 0 41161 0 --:--:-- --:--:-- --:--:-- 42533
HTTP Status: 200
Effective URL: http://192.168.150.242:8089/


Checking that your selected Channels DVR server's data files (/mnt/192.168.150.242-8089) are accessible:
Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...

total 12
drwxr-xr-x 9 root root 288 Feb 21 17:38 .
drwxr-xr-x 1 root root 4096 Mar 5 17:29 ..
-rw-r--r-- 1 root root 6148 Feb 11 22:18 .DS_Store
drwxr-xr-x 33 root root 1056 Mar 6 19:14 Database
drwxr-xr-x 6 root root 192 Mar 5 19:30 Images
drwxr-xr-x 6 root root 192 Feb 2 17:37 Imports
drwxr-xr-x 4 root root 128 Feb 16 19:30 Logs
drwxr-xr-x 14 root root 448 Mar 6 21:09 Streaming
drwxr-xr-x 4 root root 128 Mar 5 19:00 TV

If the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:

Channels reports this path as...
/Volumes/External Drive/Channels DVR


Checking that your selected Channels DVR server's log files (/mnt/192.168.150.242-8089_logs) are accessible:
Folders with the names data and latest should be visible...

total 12
drwxr-xr-x 9 root root 288 Feb 21 17:38 .
drwxr-xr-x 1 root root 4096 Mar 5 17:29 ..
-rw-r--r-- 1 root root 6148 Feb 11 22:18 .DS_Store
drwxr-xr-x 33 root root 1056 Mar 6 19:14 Database
drwxr-xr-x 6 root root 192 Mar 5 19:30 Images
drwxr-xr-x 6 root root 192 Feb 2 17:37 Imports
drwxr-xr-x 4 root root 128 Feb 16 19:30 Logs
drwxr-xr-x 14 root root 448 Mar 6 21:09 Streaming
drwxr-xr-x 4 root root 128 Mar 5 19:00 TV

If the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:

Channels reports this path as...
Support/ChannelsDVR


Checking if your Portainer token is working on ports 9000 and/or 9443:

Portainer http response on port 9000 reports version 2.16.2
Portainer Environment ID for local is
Portainer https response on port 9443 reports version
Portainer Environment ID for local is


Here's a list of your current OliveTin-related settings:

HOSTNAME=olivetin
CHANNELS_DVR=192.168.150.242:8089
CHANNELS_DVR_ALTERNATES=
CHANNELS_CLIENTS=192.168.150.231 192.168.150.194 146.12.197.19 192.168.150.177
ALERT_SMTP_SERVER=smtp.gmail.com:587
ALERT_EMAIL_FROM=[Redacted]@gmail.com
ALERT_EMAIL_PASS=[Redacted]
ALERT_EMAIL_TO=[Redacted]@gmail.com
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
PORTAINER_TOKEN=[Redacted]
PORTAINER_HOST=192.168.150.242
PORTAINER_PORT=9443
PORTAINER_ENV=


Here's the contents of /etc/resolv.conf from inside the container:

Generated by Docker Engine.

This file can be edited; Docker Engine will not make further changes once it

has been modified.

nameserver 127.0.0.11
search local
options ndots:0

Based on host file: '/etc/resolv.conf' (internal resolver)

ExtServers: [192.168.65.7]

Overrides: [search]

Option ndots from: internal


Here's the contents of /etc/hosts from inside the container:

127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2 olivetin

Standard Error:

  • dvr=192.168.150.242:8089

  • hostHealthcheck=0

  • [[ 0 == 0 ]]

  • hostHealthcheck=
    ++ echo 192.168.150.242:8089
    ++ awk -F: '{print $1}'

  • channelsHost=192.168.150.242
    ++ echo 192.168.150.242:8089
    ++ awk -F: '{print $2}'

  • channelsPort=8089

  • logFile=/config/192.168.150.242-8089_healthcheck-olivetin_latest.log

  • healthcheck=/config/fifopipe_containerside.sh

  • main

  • containerHealthcheck

  • echo -e 'Checking your OliveTin-for-Channels installation...'

  • [[ -n '' ]]

  • echo -e '(extended_check=false)\n'
    ++ grep pageTitle: /config/config.yaml
    ++ awk '{print $3}'

  • olivetinVersion=2025.03.05

  • echo -e 'Version 2025.03.05\n'

  • echo -e '----------------------------------------\n'

  • echo -e 'Checking that your selected Channels DVR server (192.168.150.242:8089) is reachable by URL:'

  • echo -e 'HTTP Status: 200 indicates success...\n'
    ++ curl --fail --output /dev/null --max-time 5 -w 'HTTP Status: %{http_code}\nEffective URL: %{url_effective}\n' http://192.168.150.242:8089

  • curlDVR=' % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed

    0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
    100 1276 100 1276 0 0 41161 0 --:--:-- --:--:-- --:--:-- 42533
    HTTP Status: 200
    Effective URL: http://192.168.150.242:8089/'

  • echo -e ' % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed

    0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
    100 1276 100 1276 0 0 41161 0 --:--:-- --:--:-- --:--:-- 42533
    HTTP Status: 200
    Effective URL: http://192.168.150.242:8089/\n'

  • echo -e '----------------------------------------\n'

  • echo -e 'Checking that your selected Channels DVR server'''s data files (/mnt/192.168.150.242-8089) are accessible:'

  • echo -e 'Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...\n'

  • ls -la /mnt/192.168.150.242-8089

  • echo -e '\nIf the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:\n'

  • echo -e 'Channels reports this path as...'
    ++ curl -s http://192.168.150.242:8089/dvr
    ++ jq -r .path
    ++ tee -a /config/192.168.150.242-8089_healthcheck-olivetin_latest.log

  • dvrShare='/Volumes/External Drive/Channels DVR'

  • [[ /Volumes/External Drive/Channels DVR == \ ]]

  • windowsOS=

  • [[ -n '' ]]

  • [[ -n '' ]]

  • echo -e '\n----------------------------------------\n'

  • echo -e 'Checking that your selected Channels DVR server'''s log files (/mnt/192.168.150.242-8089_logs) are accessible:'

  • echo -e 'Folders with the names data and latest should be visible...\n'

  • ls -la /mnt/192.168.150.242-8089_logs

  • echo -e '\nIf the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:\n'

  • echo -e 'Channels reports this path as...'
    ++ grep -m 1 'Starting Channels DVR'
    ++ awk '{print $NF}'
    ++ awk '{sub(/[\/]?data$/, ""); print}'
    ++ tee -a /config/192.168.150.242-8089_healthcheck-olivetin_latest.log
    ++ curl -s 'http://192.168.150.242:8089/log?n=100000'

  • logsShare=Support/ChannelsDVR

  • [[ Support/ChannelsDVR == \ ]]

  • windowsOS=

  • [[ -n '' ]]

  • [[ -n '' ]]

  • echo -e '\n----------------------------------------\n'

  • echo -e 'Checking if your Portainer token is working on ports 9000 and/or 9443:\n'

  • [[ -z 9443 ]]

  • portainerPort=9443
    ++ curl -s -k -H 'Authorization: Bearer ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' http://192.168.150.242:9000/api/status
    ++ jq -r .Version

  • echo 'Portainer http response on port 9000 reports version 2.16.2'
    ++ curl -s -k -X GET -H 'X-API-Key: ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' http://192.168.150.242:9000/api/endpoints
    ++ jq '.[] | select(.Name=="local") | .Id'
    jq: error (at :1): Cannot index string with string "Name"

  • echo 'Portainer Environment ID for local is '
    ++ curl -s -k -H 'Authorization: Bearer ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' https://192.168.150.242:9443/api/status
    ++ jq -r .Version

  • echo 'Portainer https response on port 9443 reports version '
    ++ curl -s -k -X GET -H 'X-API-Key: ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' https://192.168.150.242:9443/api/endpoints
    ++ jq '.[] | select(.Name=="local") | .Id'

  • echo 'Portainer Environment ID for local is '

  • echo -e '\n----------------------------------------\n'

  • echo -e 'Here'''s a list of your current OliveTin-related settings:\n'

  • echo HOSTNAME=olivetin

  • echo CHANNELS_DVR=192.168.150.242:8089

  • echo CHANNELS_DVR_ALTERNATES=

  • echo 'CHANNELS_CLIENTS=192.168.150.231 192.168.150.194 146.12.197.19 192.168.150.177'

  • echo ALERT_SMTP_SERVER=smtp.gmail.com:587

  • echo [email protected]

  • awk -F@ '{print "ALERT_EMAIL_FROM=[Redacted]@" $2}'

  • [[ -n ALERT_EMAIL_PASS ]]

  • echo 'ALERT_EMAIL_PASS=[Redacted]'

  • echo [email protected]

  • awk -F@ '{print "ALERT_EMAIL_TO=[Redacted]@" $2}'

  • echo UPDATE_YAMLS=true

  • echo UPDATE_SCRIPTS=true

  • [[ -n ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c= ]]

  • echo 'PORTAINER_TOKEN=[Redacted]'

  • echo PORTAINER_HOST=192.168.150.242

  • echo PORTAINER_PORT=9443

  • echo PORTAINER_ENV=

  • echo -e '\n----------------------------------------\n'

  • echo -e 'Here'''s the contents of /etc/resolv.conf from inside the container:\n'

  • sed 's/tail.*.ts.net/tail[Redacted].ts.net/' /etc/resolv.conf+ echo -e '\n----------------------------------------\n'

  • echo -e 'Here'''s the contents of /etc/hosts from inside the container:\n'

  • cat /etc/hosts

  • [[ -n '' ]]

  • [[ -n '' ]]

  • [[ -n '' ]]

  • cat /config/192.168.150.242-8089_healthcheck-olivetin_latest.log

I don't know why this one posted with the bullet points. It doesn't appear that way when I paste into the reply box or try to edit.

You need to use 3 backticks before and after logs, code, composes, etc. This puts the text in code block. The backtick is to the left of the 1 on most keyboards.

Thanks using the new Docker Compose and adding `PORTAINER_ENV fixed it...

1 Like
(extended_check=false)

Version 2025.03.05

----------------------------------------

Checking that your selected Channels DVR server (192.168.150.242:8089) is reachable by URL:
HTTP Status: 200 indicates success...

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  1276  100  1276    0     0   415k      0 --:--:-- --:--:-- --:--:--  415k
HTTP Status: 200
Effective URL: http://192.168.150.242:8089/

----------------------------------------

Checking that your selected Channels DVR server's data files (/mnt/192.168.150.242-8089) are accessible:
Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...

total 12
drwxr-xr-x  9 root root  288 Feb 21 17:38 .
drwxr-xr-x  1 root root 4096 Mar  5 17:29 ..
-rw-r--r--  1 root root 6148 Feb 11 22:18 .DS_Store
drwxr-xr-x 33 root root 1056 Mar  6 19:14 Database
drwxr-xr-x  6 root root  192 Mar  5 19:30 Images
drwxr-xr-x  6 root root  192 Feb  2 17:37 Imports
drwxr-xr-x  4 root root  128 Feb 16 19:30 Logs
drwxr-xr-x 14 root root  448 Mar  6 21:09 Streaming
drwxr-xr-x  4 root root  128 Mar  5 19:00 TV

If the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:

Channels reports this path as...
/Volumes/External Drive/Channels DVR

----------------------------------------

Checking that your selected Channels DVR server's log files (/mnt/192.168.150.242-8089_logs) are accessible:
Folders with the names data and latest should be visible...

total 12
drwxr-xr-x  9 root root  288 Feb 21 17:38 .
drwxr-xr-x  1 root root 4096 Mar  5 17:29 ..
-rw-r--r--  1 root root 6148 Feb 11 22:18 .DS_Store
drwxr-xr-x 33 root root 1056 Mar  6 19:14 Database
drwxr-xr-x  6 root root  192 Mar  5 19:30 Images
drwxr-xr-x  6 root root  192 Feb  2 17:37 Imports
drwxr-xr-x  4 root root  128 Feb 16 19:30 Logs
drwxr-xr-x 14 root root  448 Mar  6 21:09 Streaming
drwxr-xr-x  4 root root  128 Mar  5 19:00 TV

If the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:

Channels reports this path as...
Support/ChannelsDVR

----------------------------------------

Checking if your Portainer token is working on ports 9000 and/or 9443:

Portainer http response on port 9000 reports version 2.16.2
Portainer Environment ID for local is 
Portainer https response on port 9443 reports version 
Portainer Environment ID for local is 

----------------------------------------

Here's a list of your current OliveTin-related settings:

HOSTNAME=olivetin
CHANNELS_DVR=192.168.150.242:8089
CHANNELS_DVR_ALTERNATES=
CHANNELS_CLIENTS=192.168.150.231 192.168.150.194 146.12.197.19 192.168.150.177
ALERT_SMTP_SERVER=smtp.gmail.com:587
ALERT_EMAIL_FROM=[Redacted]@gmail.com
ALERT_EMAIL_PASS=[Redacted]
ALERT_EMAIL_TO=[Redacted]@gmail.com
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
PORTAINER_TOKEN=[Redacted]
PORTAINER_HOST=192.168.150.242
PORTAINER_PORT=9443
PORTAINER_ENV=

----------------------------------------

Here's the contents of /etc/resolv.conf from inside the container:

# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.

nameserver 127.0.0.11
search local
options ndots:0

# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [192.168.65.7]
# Overrides: [search]
# Option ndots from: internal

----------------------------------------

Here's the contents of /etc/hosts from inside the container:

127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.18.0.2	olivetin```

Could you also do the "hover check" shown in this post, and confirm your environment number? You should see a 2 or 3 in the URL shown. Let me know which one you see.

+ hostHealthcheck=0
+ [[ 0 == 0 ]]
+ hostHealthcheck=
++ echo 192.168.150.242:8089
++ awk -F: '{print $1}'
+ channelsHost=192.168.150.242
++ echo 192.168.150.242:8089
++ awk -F: '{print $2}'
+ channelsPort=8089
+ logFile=/config/192.168.150.242-8089_healthcheck-olivetin_latest.log
+ healthcheck=/config/fifopipe_containerside.sh
+ main
+ containerHealthcheck
+ echo -e 'Checking your OliveTin-for-Channels installation...'
+ [[ -n '' ]]
+ echo -e '(extended_check=false)\n'
++ grep pageTitle: /config/config.yaml
++ awk '{print $3}'
+ olivetinVersion=2025.03.05
+ echo -e 'Version 2025.03.05\n'
+ echo -e '----------------------------------------\n'
+ echo -e 'Checking that your selected Channels DVR server (192.168.150.242:8089) is reachable by URL:'
+ echo -e 'HTTP Status: 200 indicates success...\n'
++ curl --fail --output /dev/null --max-time 5 -w 'HTTP Status: %{http_code}\nEffective URL: %{url_effective}\n' http://192.168.150.242:8089
+ curlDVR='  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  1276  100  1276    0     0   415k      0 --:--:-- --:--:-- --:--:--  415k
HTTP Status: 200
Effective URL: http://192.168.150.242:8089/'
+ echo -e '  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  1276  100  1276    0     0   415k      0 --:--:-- --:--:-- --:--:--  415k
HTTP Status: 200
Effective URL: http://192.168.150.242:8089/\n'
+ echo -e '----------------------------------------\n'
+ echo -e 'Checking that your selected Channels DVR server'\''s data files (/mnt/192.168.150.242-8089) are accessible:'
+ echo -e 'Folders with the names Database, Images, Imports, Logs, Movies, Streaming and TV should be visible...\n'
+ ls -la /mnt/192.168.150.242-8089
+ echo -e '\nIf the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:\n'
+ echo -e 'Channels reports this path as...'
++ curl -s http://192.168.150.242:8089/dvr
++ jq -r .path
++ tee -a /config/192.168.150.242-8089_healthcheck-olivetin_latest.log
+ dvrShare='/Volumes/External Drive/Channels DVR'
+ [[ /Volumes/External Drive/Channels DVR == *\\* ]]
+ windowsOS=
+ [[ -n '' ]]
+ [[ -n '' ]]
+ echo -e '\n----------------------------------------\n'
+ echo -e 'Checking that your selected Channels DVR server'\''s log files (/mnt/192.168.150.242-8089_logs) are accessible:'
+ echo -e 'Folders with the names data and latest should be visible...\n'
+ ls -la /mnt/192.168.150.242-8089_logs
+ echo -e '\nIf the listed folders are NOT visible, AND you have your Channels DVR and Docker on the same system:\n'
+ echo -e 'Channels reports this path as...'
++ curl -s 'http://192.168.150.242:8089/log?n=100000'
++ grep -m 1 'Starting Channels DVR'
++ awk '{print $NF}'
++ tee -a /config/192.168.150.242-8089_healthcheck-olivetin_latest.log
++ awk '{sub(/[\\/]?data$/, ""); print}'
+ logsShare=Support/ChannelsDVR
+ [[ Support/ChannelsDVR == *\\* ]]
+ windowsOS=
+ [[ -n '' ]]
+ [[ -n '' ]]
+ echo -e '\n----------------------------------------\n'
+ echo -e 'Checking if your Portainer token is working on ports 9000 and/or 9443:\n'
+ [[ -z 9443 ]]
+ portainerPort=9443
++ curl -s -k -H 'Authorization: Bearer ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' http://192.168.150.242:9000/api/status
++ jq -r .Version
+ echo 'Portainer http response on port 9000 reports version 2.16.2'
++ curl -s -k -X GET -H 'X-API-Key: ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' http://192.168.150.242:9000/api/endpoints
++ jq '.[] | select(.Name=="local") | .Id'
jq: error (at <stdin>:1): Cannot index string with string "Name"
+ echo 'Portainer Environment ID for local is '
++ curl -s -k -H 'Authorization: Bearer ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' https://192.168.150.242:9443/api/status
++ jq -r .Version
+ echo 'Portainer https response on port 9443 reports version '
++ curl -s -k -X GET -H 'X-API-Key: ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c=' https://192.168.150.242:9443/api/endpoints
++ jq '.[] | select(.Name=="local") | .Id'
+ echo 'Portainer Environment ID for local is '
+ echo -e '\n----------------------------------------\n'
+ echo -e 'Here'\''s a list of your current OliveTin-related settings:\n'
+ echo HOSTNAME=olivetin
+ echo CHANNELS_DVR=192.168.150.242:8089
+ echo CHANNELS_DVR_ALTERNATES=
+ echo 'CHANNELS_CLIENTS=192.168.150.231 192.168.150.194 146.12.197.19 192.168.150.177'
+ echo ALERT_SMTP_SERVER=smtp.gmail.com:587
+ echo [email protected]
+ awk -F@ '{print "ALERT_EMAIL_FROM=[Redacted]@" $2}'
+ [[ -n ALERT_EMAIL_PASS ]]
+ echo 'ALERT_EMAIL_PASS=[Redacted]'
+ echo [email protected]
+ awk -F@ '{print "ALERT_EMAIL_TO=[Redacted]@" $2}'
+ echo UPDATE_YAMLS=true
+ echo UPDATE_SCRIPTS=true
+ [[ -n ptr_TP3q1aaHghJfhw94AMoa6ulP04EI93wfbogZlsKSb3c= ]]
+ echo 'PORTAINER_TOKEN=[Redacted]'
+ echo PORTAINER_HOST=192.168.150.242
+ echo PORTAINER_PORT=9443
+ echo PORTAINER_ENV=
+ echo -e '\n----------------------------------------\n'
+ echo -e 'Here'\''s the contents of /etc/resolv.conf from inside the container:\n'
+ sed 's/tail.*\.ts\.net/tail[Redacted].ts.net/' /etc/resolv.conf
+ echo -e '\n----------------------------------------\n'
+ echo -e 'Here'\''s the contents of /etc/hosts from inside the container:\n'
+ cat /etc/hosts
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ cat /config/192.168.150.242-8089_healthcheck-olivetin_latest.log```

I don't get either number when I hover over "environments." Rather, I get localhost:9000/#!/endpoints

Did I fix my posts correctly above?

This needs to be done from the page shown in the screenshot. Click on Home in Portainer, and then hover over the local environment block.

Way better -- thanks! :slight_smile:

1 Like

I get the number "2"

Check if you're using the latest OliveTin Docker Compose (as shown in Post #1 of this thread), and check if your env vars include the new:

PORTAINER_ENV=2

If not, add it.

I think I know what to do, but I cannot remember where in Portainer to go to change the variables.

The OliveTin Docker Compose does not get automatically updated, and I generally only change it a few times per year. Here's the latest one from post #1 (dated 2025.02.25):

version: '3.9'
services:
  olivetin: # This docker-compose typically requires no editing. Use the Environment variables section of Portainer to set your values.
    # 2025.02.25
    # GitHub home for this project: https://github.com/bnhf/OliveTin.
    # Docker container home for this project with setup instructions: https://hub.docker.com/repository/docker/bnhf/olivetin.
    image: bnhf/olivetin:${TAG} # Add the tag like latest or test to the environment variables below.
    container_name: olivetin
    hostname: olivetin
    dns_search: ${DOMAIN} # For Tailscale users using Magic DNS, add your Tailnet (tailxxxxx.ts.net) to use hostnames for remote nodes, otherwise use your local domain name.
    ports:
      - ${HOST_PORT}:1337
    environment:
      - CHANNELS_DVR=${CHANNELS_DVR_HOST}:${CHANNELS_DVR_PORT} # Add your Channels DVR server in the form CHANNELS_DVR_HOST=<hostname or ip> and CHANNELS_DVR_PORT=<port>.
      #- CHANNELS_DVR_ALTERNATES=${CHANNELS_DVR2_HOST}:${CHANNELS_DVR2_PORT} # Space separated list of alternate Channels DVR servers to choose from in the form hostname:port or ip:port.
      - CHANNELS_CLIENTS=${CHANNELS_CLIENTS} # Space separated list of Channels DVR clients you'd like notifications sent to in the form hostname or IP.
      - ALERT_SMTP_SERVER=${ALERT_SMTP_SERVER} # SMTP server to use for sending alert e-mails. smtp.gmail.com:587 for example.
      - ALERT_EMAIL_FROM=${ALERT_EMAIL_FROM} # Sender address for alert e-mails.
      - ALERT_EMAIL_PASS=${ALERT_EMAIL_PASS} # SMTP "app" password established through GMail or Yahoo Mail. Do not use your everyday e-mail address.
      - ALERT_EMAIL_TO=${ALERT_EMAIL_TO} # Recipient address for alert e-mails.
      - UPDATE_YAMLS=${UPDATE_YAMLS} # Set this to true to update config.yaml.
      - UPDATE_SCRIPTS=${UPDATE_SCRIPTS} # Set this to true to update all included scripts.
      - TZ=${TZ} # Add your local timezone in standard linux format. E.G. US/Eastern, US/Central, US/Mountain, US/Pacific, etc.
      - PORTAINER_TOKEN=${PORTAINER_TOKEN} # Generate via <username> dropdown (upper right of WebUI), "My account", API tokens.
      - PORTAINER_HOST=${PORTAINER_HOST} # Hostname or IP of the Docker host you're running Portainer on.
      - PORTAINER_PORT=${PORTAINER_PORT} # https port you're running Portainer on. 9443 is the default.
      - PORTAINER_ENV=${PORTAINER_ENV} # Set this is if you're using an alternate Portainer Environment for some reason. 2 is the default.
    volumes:
      - ${HOST_DIR}/olivetin:/config # Add the parent directory on your Docker you'd like to use.
      - ${DVR_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT} # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR network share.
      - ${LOGS_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_logs # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR logs network share.
      #- ${TUBEARCHIVIST_SHARE}:/mnt/${CHANNELS_DVR_HOST}-${CHANNELS_DVR_PORT}_ta # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your TubeArchivist videos network share.
      #- ${DVR2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT} # Note that these volume mounts should always be to /mnt/hostname-port or /mnt/ip-port (dash rather than a colon between).
      #- ${LOGS2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT}_logs # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your Channels DVR logs network share.
      #- ${TUBEARCHIVIST2_SHARE}:/mnt/${CHANNELS_DVR2_HOST}-${CHANNELS_DVR2_PORT}_ta # This can either be a Docker volume or a host directory that's connected via Samba or NFS to your TubeArchivist videos network share.
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

  static-file-server:
    image: halverneus/static-file-server:latest
    container_name: static-file-server
    dns_search: ${DOMAIN}
    ports:
      - ${HOST_SFS_PORT}:8080
    environment:
      - FOLDER=${FOLDER}
    volumes:
      - ${HOST_DIR}/olivetin/data:${FOLDER}
    restart: unless-stopped

#volumes: # use this section if you've setup a docker volume named channels-dvr, with CIFS or NFS, to bind to /mnt/dvr inside the container. Set ${HOST_DIR} to channels-dvr (HOST_DIR=channels_dvr) in that example.
  #channels-dvr:
    #external: true
  #channels-dvr-logs:
    #external: true
  #tubearchivist:
    #external: true

And, the sample env vars, which need to be updated with your values:

TAG=latest
DOMAIN=tailxxxxx.ts.net
HOST_PORT=1337
CHANNELS_DVR_HOST=local-server
CHANNELS_DVR_PORT=8089
CHANNELS_DVR2_HOST=another-server
CHANNELS_DVR2_PORT=8089
CHANNELS_CLIENTS=appletv4k-den firestick-bedroom
ALERT_SMTP_SERVER=smtp.gmail.com:587
[email protected]
ALERT_EMAIL_PASS=xxxxxxxxxxxxxxxx
[email protected]
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=US/Mountain
HOST_DIR=/data
DVR_SHARE=/mnt/dvr
LOGS_SHARE=/mnt/channelsdvr
TUBEARCHIVIST_SHARE=/mnt/dvr
HOST_SFS_PORT=8080
FOLDER=/web
PORTAINER_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PORTAINER_HOST=docker-host
PORTAINER_PORT=9443
PORTAINER_ENV=2

It's likely you only need to add the last one (PORTAINER_ENV=2) to your current list.