Redneck Guide to Docker 20.10.14 on OS 5

This is by no means the best way to go about getting Docker 20.10.14 running on your device. I also leave out some of the specific instructions on how to turn on SSH, use the terminal, etc. Please refer to the forum search and Google for further assistance on these topics.

  1. Download the bin file for your device from the link below:

https://github.com/WDCommunity/wdpksrc/releases/tag/docker-v20.10.14

  1. Upload/Install the bin file through your NAS’s website in the app section

Note: Recently I updated my Docker container by uploading the most recent bin released by the Great @JediNite - big thank you!

I have ‘hidden’ the below steps as I did not find they were necessary; however, if you encounter a problem, check them out:

Summary

Using FileZilla to SFTP into your NAS, replace the files in

/mnt/HD/HD_a2/Nas_Prog/docker/docker

  • with the files from docker-20.10.15.tgz from the link below:

Release docker-v20.10.15 · JediNite/wdpksrc · GitHub

  1. If Portainer will not load from port 9000, you will need to change the port. Since this was a new setup, I deleted the below folder.

/mnt/HD/HD_a2/Nas_Prog/docker/portainer

  1. I then modified the update_portainer.sh in the below location

/mnt/HD/HD_a2/Nas_Prog/docker

  • I made the following two changes in the shell script to do two things: (1) update to the latest version of Portainer; and, (2) open up port 9001 and redirect traffic to 9000 so that the container is accessible locally from our browser.

docker pull portainer/portainer-ce

docker run -d -p 9001:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v $(readlink -f ${APKG_PATH})/portainer:/data portainer/portainer-ce

  1. After you upload the new version of the file, run the script by typing in

sh update_portainer.sh

  1. You should now be able to visit [your NASs IP]:9001 to setup your Portainer. Though some users have noted that newer version of Portainer now use port 9443. If you do not do this, you leave your entire NAS wide open. Also, don’t forget to turn off SSH…
7 Likes

Can you explain how @dswv42? Maybe we can get an app version setup to skip all these steps!

For the first time I am thinking about doing Docker again on my other non-WD NAS

If you want to read up there are more active user groups in the other NAS forums


comments directed to ActiveUser – I blame the reply button :slight_smile:

Hey @ActiveUser,

To be honest, I had been leaving the package builds to @Tfl to do and I had been focusing on making sure that each new docker release is available for the arm NAS units on my Github repo. On my own NAS, I actually don’t bother updating the binary for the installs and instead as each release comes out I create a new docker folder (eg. docker-20.10.8) and then create a symbolic link from this folder to a folder called “docker”. When a new release comes out, then just need to stop docker, remove the symbolic link, point to the new folder and restart docker.

I know this is probably not the answer you are looking for.

Cheers,

JediNite

1 Like

Thank you @JediNite for the reply! I’m just glad to hear from you. Having the latest binary on Github is awesome in of itself.

Appreciate your insight into upgrading. This seems like a simple enough solution to updating Docker. It would be great to get this into a guide - for novices like myself…

Great guide, thank you, worked like a charm!
No-one was more surprised than me to see the logon screen appear in my browser!
BUT, one problem, if I try adding a new Environment in Portainer, I get an error message “Failure / xxx url xxx / ping EOF”.
Any idea how to fix this?

I’m sorry to report I have no idea - I truthfully know very little about Docker. Have you tried googling this error message to see if others have encountered it?

And a new and worse problem!

I now can’t access the Portainer logon screen.

If I go to My IP:9001 in whatever browser, I get “Page cannot be found.”

Have rebooted the box, the docker app is running in the WD GUI (although the “Configure” button doesn’t work as it seems to be aimed at Port 9000), I can access all docker/portainer files via WinSCP.

Just no logon screen. It worked fine for about a week and then disappeared. Halp

*SOLVED: Portainer needed a reboot by running update_portainer.sh

Interesting find and glad you found a solution.

this one is driving me crazy - ports are open and should be exposed

I should be able to go to 194.168.0.184:8096 and jellyfin should open
but i can only get portainer to open on 194.168.0.184:9001 (i changed the port from default)

I really have no clue.
ive tried lots of stuff - if there is any info you want let me know.


> 
> 
> {
>     "AppArmorProfile": "",
>     "Args": [],
>     "Config": {
>         "AttachStderr": false,
>         "AttachStdin": false,
>         "AttachStdout": false,
>         "Cmd": null,
>         "Domainname": "",
>         "Entrypoint": [
>             "/init"
>         ],
>         "Env": [
>             "PUID=1000",
>             "PGID=1000",
>             "TZ=Canada/Calgary",
>             "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
>             "DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1",
>             "LC_ALL=en_US.UTF-8",
>             "LANG=en_US.UTF-8",
>             "LANGUAGE=en_US:en",
>             "JELLYFIN_MEDIA_DIR=/media",
>             "JELLYFIN_DATA_DIR=/config",
>             "JELLYFIN_CACHE_DIR=/cache",
>             "JELLYFIN_CONFIG_DIR=/config/config",
>             "JELLYFIN_LOG_DIR=/config/log",
>             "JELLYFIN_WEB_DIR=/jellyfin/jellyfin-web",
>             "JELLYFIN_FFMPEG=/usr/lib/jellyfin-ffmpeg/ffmpeg",
>             "HOME=/root",
>             "TERM=xterm",
>             "NVIDIA_DRIVER_CAPABILITIES=compute,video,utility",
>             "EXPOSE 8096=EXPOSE 8096",
>             "-p 8096:8096=-p 8096:8096"
>         ],
>         "ExposedPorts": {
>             "7359/udp": {},
>             "8096/tcp": {},
>             "8920/tcp": {}
>         },
>         "Hostname": "7a8bb9322751",
>         "Image": "linuxserver/jellyfin:latest",
>         "Labels": {
>             "build_version": "Linuxserver.io version:- 10.7.7-1-ls161 Build-date:- 2022-05-26T05:27:33+02:00",
>             "maintainer": "thelamer",
>             "org.opencontainers.image.authors": "linuxserver.io",
>             "org.opencontainers.image.created": "2022-05-26T05:27:33+02:00",
>             "org.opencontainers.image.description": "[Jellyfin](**newuser had to remove link) is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps. Jellyfin is descended from Emby's 3.5.2 release and ported to the .NET Core framework to enable full cross-platform support. There are no strings attached, no premium licenses or features, and no hidden agendas: just a team who want to build something better and work together to achieve it.",
>             "org.opencontainers.image.documentation": "***new user had to remove link",
>             "org.opencontainers.image.licenses": "GPL-3.0-only",
>             "org.opencontainers.image.ref.name": "02227bfbae131618953e603a930b591f77525de0",
>             "org.opencontainers.image.revision": "02227bfbae131618953e603a930b591f77525de0",
>             "org.opencontainers.image.source": "*** new user had to remove link",
>             "org.opencontainers.image.title": "Jellyfin",
>             "org.opencontainers.image.url": "*** new user had to remove link",
>             "org.opencontainers.image.vendor": "linuxserver.io",
>             "org.opencontainers.image.version": "10.7.7-1-ls161"
>         },
>         "OnBuild": null,
>         "OpenStdin": false,
>         "StdinOnce": false,
>         "Tty": false,
>         "User": "",
>         "Volumes": {
>             "/cache": {},
>             "/config": {},
>             "/data/movies1": {},
>             "/media": {}
>         },
>         "WorkingDir": ""
>     },
>     "Created": "2022-06-15T03:28:09.41498975Z",
>     "Driver": "vfs",
>     "ExecIDs": null,
>     "GraphDriver": {
>         "Data": null,
>         "Name": "vfs"
>     },
>     "HostConfig": {
>         "AutoRemove": false,
>         "Binds": [
>             "/mnt/HD/HD_a2/jellyfin/MOVIES:/data/movies1",
>             "b1019363eefbbdf8760c4bc83563d0df124ce842f5352af12a1a16239140181e:/media",
>             "d0d7d315b3a0bd399d9167866cff9e43ee599ccb429b7ac54b3446b80974b01d:/cache",
>             "/mnt/HD/HD_a2/jellyfin/config:/config"
>         ],
>         "BlkioDeviceReadBps": null,
>         "BlkioDeviceReadIOps": null,
>         "BlkioDeviceWriteBps": null,
>         "BlkioDeviceWriteIOps": null,
>         "BlkioWeight": 0,
>         "BlkioWeightDevice": null,
>         "CapAdd": [
>             "AUDIT_WRITE",
>             "CHOWN",
>             "DAC_OVERRIDE",
>             "FOWNER",
>             "FSETID",
>             "KILL",
>             "MKNOD",
>             "NET_ADMIN",
>             "NET_BIND_SERVICE",
>             "NET_RAW",
>             "SETFCAP",
>             "SETGID",
>             "SETPCAP",
>             "SETUID",
>             "SYS_CHROOT"
>         ],
>         "CapDrop": [
>             "AUDIT_CONTROL",
>             "BLOCK_SUSPEND",
>             "DAC_READ_SEARCH",
>             "IPC_LOCK",
>             "IPC_OWNER",
>             "LEASE",
>             "LINUX_IMMUTABLE",
>             "MAC_ADMIN",
>             "MAC_OVERRIDE",
>             "NET_BROADCAST",
>             "SYSLOG",
>             "SYS_ADMIN",
>             "SYS_BOOT",
>             "SYS_MODULE",
>             "SYS_NICE",
>             "SYS_PACCT",
>             "SYS_PTRACE",
>             "SYS_RAWIO",
>             "SYS_RESOURCE",
>             "SYS_TIME",
>             "SYS_TTY_CONFIG",
>             "WAKE_ALARM"
>         ],
>         "Cgroup": "",
>         "CgroupParent": "",
>         "CgroupnsMode": "host",
>         "ConsoleSize": [
>             0,
>             0
>         ],
>         "ContainerIDFile": "",
>         "CpuCount": 0,
>         "CpuPercent": 0,
>         "CpuPeriod": 0,
>         "CpuQuota": 0,
>         "CpuRealtimePeriod": 0,
>         "CpuRealtimeRuntime": 0,
>         "CpuShares": 0,
>         "CpusetCpus": "",
>         "CpusetMems": "",
>         "DeviceCgroupRules": null,
>         "DeviceRequests": null,
>         "Devices": [],
>         "Dns": [],
>         "DnsOptions": [],
>         "DnsSearch": [],
>         "ExtraHosts": [],
>         "GroupAdd": null,
>         "IOMaximumBandwidth": 0,
>         "IOMaximumIOps": 0,
>         "Init": false,
>         "IpcMode": "private",
>         "Isolation": "",
>         "KernelMemory": 0,
>         "KernelMemoryTCP": 0,
>         "Links": null,
>         "LogConfig": {
>             "Config": {},
>             "Type": "json-file"
>         },
>         "MaskedPaths": [
>             "/proc/asound",
>             "/proc/acpi",
>             "/proc/kcore",
>             "/proc/keys",
>             "/proc/latency_stats",
>             "/proc/timer_list",
>             "/proc/timer_stats",
>             "/proc/sched_debug",
>             "/proc/scsi",
>             "/sys/firmware"
>         ],
>         "Memory": 0,
>         "MemoryReservation": 0,
>         "MemorySwap": 0,
>         "MemorySwappiness": null,
>         "NanoCpus": 0,
>         "NetworkMode": "bridge",
>         "OomKillDisable": false,
>         "OomScoreAdj": 0,
>         "PidMode": "",
>         "PidsLimit": null,
>         "PortBindings": {
>             "7359/udp": [
>                 {
>                     "HostIp": "",
>                     "HostPort": "7359"
>                 }
>             ],
>             "8096/tcp": [
>                 {
>                     "HostIp": "",
>                     "HostPort": "8096"
>                 }
>             ],
>             "8920/tcp": [
>                 {
>                     "HostIp": "",
>                     "HostPort": "8920"
>                 }
>             ]
>         },
>         "Privileged": false,
>         "PublishAllPorts": false,
>         "ReadonlyPaths": [
>             "/proc/bus",
>             "/proc/fs",
>             "/proc/irq",
>             "/proc/sys",
>             "/proc/sysrq-trigger"
>         ],
>         "ReadonlyRootfs": false,
>         "RestartPolicy": {
>             "MaximumRetryCount": 0,
>             "Name": "always"
>         },
>         "Runtime": "runc",
>         "SecurityOpt": null,
>         "ShmSize": 67108864,
>         "UTSMode": "",
>         "Ulimits": null,
>         "UsernsMode": "",
>         "VolumeDriver": "",
>         "VolumesFrom": null
>     },
>     "HostnamePath": "/mnt/HD/HD_a2/Nas_Prog/_docker/containers/712e52099fe530c80fd6fea6fb7936c17ae039e26465b06b264d8f5fbdb87e80/hostname",
>     "HostsPath": "/mnt/HD/HD_a2/Nas_Prog/_docker/containers/712e52099fe530c80fd6fea6fb7936c17ae039e26465b06b264d8f5fbdb87e80/hosts",
>     "Id": "712e52099fe530c80fd6fea6fb7936c17ae039e26465b06b264d8f5fbdb87e80",
>     "Image": "sha256:044fb6a452efe3b0e6c21e2a06b212c03c4262fa41772a9ad395f281b5a9e927",
>     "LogPath": "/mnt/HD/HD_a2/Nas_Prog/_docker/containers/712e52099fe530c80fd6fea6fb7936c17ae039e26465b06b264d8f5fbdb87e80/712e52099fe530c80fd6fea6fb7936c17ae039e26465b06b264d8f5fbdb87e80-json.log",
>     "MountLabel": "",
>     "Mounts": [
>         {
>             "Destination": "/data/movies1",
>             "Mode": "",
>             "Propagation": "rprivate",
>             "RW": true,
>             "Source": "/mnt/HD/HD_a2/jellyfin/MOVIES",
>             "Type": "bind"
>         },
>         {
>             "Destination": "/media",
>             "Driver": "local",
>             "Mode": "z",
>             "Name": "b1019363eefbbdf8760c4bc83563d0df124ce842f5352af12a1a16239140181e",
>             "Propagation": "",
>             "RW": true,
>             "Source": "/mnt/HD/HD_a2/Nas_Prog/_docker/volumes/b1019363eefbbdf8760c4bc83563d0df124ce842f5352af12a1a16239140181e/_data",
>             "Type": "volume"
>         },
>         {
>             "Destination": "/cache",
>             "Driver": "local",
>             "Mode": "z",
>             "Name": "d0d7d315b3a0bd399d9167866cff9e43ee599ccb429b7ac54b3446b80974b01d",
>             "Propagation": "",
>             "RW": true,
>             "Source": "/mnt/HD/HD_a2/Nas_Prog/_docker/volumes/d0d7d315b3a0bd399d9167866cff9e43ee599ccb429b7ac54b3446b80974b01d/_data",
>             "Type": "volume"
>         },
>         {
>             "Destination": "/config",
>             "Mode": "",
>             "Propagation": "rprivate",
>             "RW": true,
>             "Source": "/mnt/HD/HD_a2/jellyfin/config",
>             "Type": "bind"
>         }
>     ],
>     "Name": "/jellyfin",
>     "NetworkSettings": {
>         "Bridge": "",
>         "EndpointID": "7512cc68a11fc562c7c14b412722f6894e3068e2263d9bf1f2368a13c9ea36a9",
>         "Gateway": "172.17.0.1",
>         "GlobalIPv6Address": "",
>         "GlobalIPv6PrefixLen": 0,
>         "HairpinMode": false,
>         "IPAddress": "172.17.0.2",
>         "IPPrefixLen": 16,
>         "IPv6Gateway": "",
>         "LinkLocalIPv6Address": "",
>         "LinkLocalIPv6PrefixLen": 0,
>         "MacAddress": "02:42:ac:11:00:02",
>         "Networks": {
>             "bridge": {
>                 "Aliases": null,
>                 "DriverOpts": null,
>                 "EndpointID": "7512cc68a11fc562c7c14b412722f6894e3068e2263d9bf1f2368a13c9ea36a9",
>                 "Gateway": "172.17.0.1",
>                 "GlobalIPv6Address": "",
>                 "GlobalIPv6PrefixLen": 0,
>                 "IPAMConfig": null,
>                 "IPAddress": "172.17.0.2",
>                 "IPPrefixLen": 16,
>                 "IPv6Gateway": "",
>                 "Links": null,
>                 "MacAddress": "02:42:ac:11:00:02",
>                 "NetworkID": "29dc7eb989fb00071366558be96516754d7601dffab52efa5f33ec6f739db24b"
>             }
>         },
>         "Ports": {
>             "7359/udp": [
>                 {
>                     "HostIp": "0.0.0.0",
>                     "HostPort": "7359"
>                 }
>             ],
>             "8096/tcp": [
>                 {
>                     "HostIp": "0.0.0.0",
>                     "HostPort": "8096"
>                 }
>             ],
>             "8920/tcp": [
>                 {
>                     "HostIp": "0.0.0.0",
>                     "HostPort": "8920"
>                 }
>             ]
>         },
>         "SandboxID": "489406ca128418964df72877703b6e7565e7a4da214d75517bf656211a2daebd",
>         "SandboxKey": "/var/run/docker/netns/489406ca1284",
>         "SecondaryIPAddresses": null,
>         "SecondaryIPv6Addresses": null
>     },
>     "Path": "/init",
>     "Platform": "linux",
>     "Portainer": {
>         "ResourceControl": {
>             "Id": 19,
>             "ResourceId": "712e52099fe530c80fd6fea6fb7936c17ae039e26465b06b264d8f5fbdb87e80",
>             "SubResourceIds": [],
>             "Type": 1,
>             "UserAccesses": [],
>             "TeamAccesses": [],
>             "Public": false,
>             "AdministratorsOnly": true,
>             "System": false
>         }
>     },
>     "ProcessLabel": "",
>     "ResolvConfPath": "/mnt/HD/HD_a2/Nas_Prog/_docker/containers/712e52099fe530c80fd6fea6fb7936c17ae039e26465b06b264d8f5fbdb87e80/resolv.conf",
>     "RestartCount": 0,
>     "State": {
>         "Dead": false,
>         "Error": "",
>         "ExitCode": 0,
>         "FinishedAt": "0001-01-01T00:00:00Z",
>         "OOMKilled": false,
>         "Paused": false,
>         "Pid": 12082,
>         "Restarting": false,
>         "Running": true,
>         "StartedAt": "2022-06-15T03:29:27.942870709Z",
>         "Status": "running"
>     }
> }

Important thing to note, some users have reported that newer versions of Portainer use port 9443.

#WDUserRewards

Has anyone successfully installed Jellyfin on the WD Cloud 4100 docker/portainer using this YouTube method? I don’t understand how to create the file storage for this. Can anyone help?

How to Install Jellyfin on Docker with Portainer

Have you read through this thread @Cloud-User?

Hi
thanks for the thorough tutorial. I was wondering if you could expand a bit on what you mean with the last paragrapah ( setup your Portainer, otherwise you leave your NAS wide open). I set up an admin account with a random generated password, but I didn’t go to the trouble to setup an OAuth. Sorry for my ignorance but does Portaire expose the NAS to the Internet? I haven’t personally setup any reverse proxy or port forwarding service, but now I’m unsure if any of the WD services may cause this.

Without a password, anyone on your network can access your Portaire and setup new containers. If you setup port forwarding, this would as you know, expand to the whole internet.

Thanks for the response, this is much less dramatic than I imagined. I’m not a complete noob, but I still navigate network setups and I have to learn a lot. From the wording on the original post, I was concerned that Portaire may set up port forwarding as part of the installation process. Anyway, port monitoring and an OAuth key make life a bit more difficult for any intruders. Thanks for helping out, truly a great tutorial!

1 Like

Hi,

What would be the script to change the port to 9443?

Following activeuser’s instructions, I can get it to change to 9001 but not 9443

I have tried docker run -d -p 9443:9000 etc. and also docker run -d -p 9443:9443 etc. without success (error message: ERRO[0035] error waiting for container: context cancelled).

Note: after every attempt, successful or not, I deleted the docker and portainer directories in addition to uninstalling, so every script should have run on a fresh install

Context:

0/ noob but I understand enough to at least use a script if it’s detailed enough

1/I have read that port 9443 is more secure. If 9001 is also secure, I’m happy to use it, I just know it’s not https
2/ there is an option in Portainer to “force https only”, but the “apply changes” button below stays greyed out, so I can’t save the setting

Any advice and / or explanation is appreciated!

I did not observe this script to be written to create and include the needed SSL certificates for Portainer to execute the SSL protocol. You could look for instructions on how to generate these certificates, upload them to Portainer, and then change the port assigned to Portainer from your SSH. Having never done this, I wouldn’t want to give you instructions I’ve never tried. If you are successful finding a good method and it works, please consider sharing it :slight_smile:

At the end of the day, SSL is only encrypting the communication between your browser and Portainer. If you have no concern someone or something is listening to your communications over your home network, you’ll likely be fine!

Many thanks for the reply.

So it sort of circles back to Coolajami’s question and your answer. I (think I) understand.

I have no concern within my home network, so I’ll stick to port 9001.

I was asking because I remember reading somewhere that with WD, unlike other NAS, “everything goes over the internet”. I don’t know enough to check whether it’s true or not.

1 Like