Dockerization of some popular applications.


Recommended Posts

NAME IMAGE COMMAND CREATED STATUS PORTS CONTAINER ID AUTOSTART REMOVE

couchpotato needo/couchpotato:latest /sbin/my_init 9 minutes ago Up 9 minutes 0.0.0.0:49153->5050/tcp Remove

 

sabnzbd needo/sabnzbd:latest /sbin/my_init 14 hours ago Up 14 hours 0.0.0.0:8080->8080/tcp

0.0.0.0:9090->9090/tcp -  Working

 

sickbeard needo/sickbeard:latest /sbin/my_init 13 hours ago Up 13 hours 0.0.0.0:49154->8081/tcp

 

-------

 

root@Daedalus:/mnt/cache/docker# docker ps -a

CONTAINER ID        IMAGE                      COMMAND            CREATED            STATUS              PORTS                                            NAMES

3858c7dc0063        needo/couchpotato:latest  /sbin/my_init      35 minutes ago      Up 35 minutes      0.0.0.0:49153->5050/tcp                          couchpotato

ea9e46862378        needo/sickbeard:latest    /sbin/my_init      13 hours ago        Up 7 minutes        0.0.0.0:49154->8081/tcp                          sickbeard

283fc79260dd        needo/sabnzbd:latest      /sbin/my_init      14 hours ago        Up 14 hours        0.0.0.0:8080->8080/tcp, 0.0.0.0:9090->9090/tcp  sabnzbd

 

Still cannot access them :/ I'm guessing iit's not propagated?

 

---------

 

docker run -d --name="couchpotato" -v /mnt/cache/appdata/couchpotato:/config -v /mnt/user:/mnt/user -v /etc/localtime:/etc/localtime:ro -p 5050 needo/couchpotato

 

chown -R nobody:users /mnt/cache/appdata/couchpotato

 

Link to comment

When running couch potato, this time without EDGE, I am getting this in the logs:

 

/var/run/sshd must be owned by root and not group or world-writable.

 

Does couchpotato require OpenSSH?

 

There IS no such file. Is ssh included with the current build of UnRAID? If not, is there an OpenSSH docker?

 

Check the permissions on your docker folder.  I was getting this too and I did:

 

chown -R root:root docker

chmod -R 755 docker

 

I haven't seen that message since.

 

Doug

Link to comment

NAME IMAGE COMMAND CREATED STATUS PORTS CONTAINER ID AUTOSTART REMOVE

couchpotato needo/couchpotato:latest /sbin/my_init 9 minutes ago Up 9 minutes 0.0.0.0:49153->5050/tcp Remove

 

sabnzbd needo/sabnzbd:latest /sbin/my_init 14 hours ago Up 14 hours 0.0.0.0:8080->8080/tcp

0.0.0.0:9090->9090/tcp -  Working

 

sickbeard needo/sickbeard:latest /sbin/my_init 13 hours ago Up 13 hours 0.0.0.0:49154->8081/tcp

 

-------

 

root@Daedalus:/mnt/cache/docker# docker ps -a

CONTAINER ID        IMAGE                      COMMAND            CREATED            STATUS              PORTS                                            NAMES

3858c7dc0063        needo/couchpotato:latest  /sbin/my_init      35 minutes ago      Up 35 minutes      0.0.0.0:49153->5050/tcp                          couchpotato

ea9e46862378        needo/sickbeard:latest    /sbin/my_init      13 hours ago        Up 7 minutes        0.0.0.0:49154->8081/tcp                          sickbeard

283fc79260dd        needo/sabnzbd:latest      /sbin/my_init      14 hours ago        Up 14 hours        0.0.0.0:8080->8080/tcp, 0.0.0.0:9090->9090/tcp  sabnzbd

 

Still cannot access them :/ I'm guessing iit's not propagated?

 

---------

 

docker run -d --name="couchpotato" -v /mnt/cache/appdata/couchpotato:/config -v /mnt/user:/mnt/user -v /etc/localtime:/etc/localtime:ro -p 5050 needo/couchpotato

 

chown -R nobody:users /mnt/cache/appdata/couchpotato

 

first thing; are you using the docker plugin yet?  if so, life for you will be MUCH easier.

 

regardless, it seems your run command is incomplete.  I'm not sure how the port got assigned, but your run command shouldn't be doing it.

 

You need to change it to...

 

docker run -d --name="couchpotato" -v /mnt/cache/appdata/couchpotato:/config -v /mnt/user:/mnt/user -v /etc/localtime:/etc/localtime:ro -p 49153:5050 needo/couchpotato

 

(notice the 49153: before 5050 now)

 

you probably need to run 'docker rm couchpotato', in a command prompt, then run the run command above, just to be sure.

 

if putting Deadalus:49153 into your browser address bar, then hitting shift-go doesn't bring up couchpotato, then something is most likely wrong with your permissions.

 

if none of that works, I suggest you install the docker plugin, stop the docker, remove the container, then remove the image, remove any couchpotato folders you have anywhere (/appdata/couchpotato), then start from scratch.

Link to comment

first thing; are you using the docker plugin yet?  if so, life for you will be MUCH easier.

 

Yes I am :) thanks for advising it.

 

regardless, it seems your run command is incomplete.  I'm not sure how the port got assigned, but your run command shouldn't be doing it.

 

You need to change it to...

 

docker run -d --name="couchpotato" -v /mnt/cache/appdata/couchpotato:/config -v /mnt/user:/mnt/user -v /etc/localtime:/etc/localtime:ro -p 49153:5050 needo/couchpotato

 

(notice the 49153: before 5050 now)

 

you probably need to run 'docker rm couchpotato', in a command prompt, then run the run command above, just to be sure.

 

if putting Deadalus:49153 into your browser address bar, then hitting shift-go doesn't bring up couchpotato, then something is most likely wrong with your permissions.

 

I can access it via 49135 but not via 5050.

 

if none of that works, I suggest you install the docker plugin, stop the docker, remove the container, then remove the image, remove any couchpotato folders you have anywhere (/appdata/couchpotato), then start from scratch.

 

Ok

Link to comment

I can access it via 49135 but not via 5050.

 

That is correct, and how it is supposed to work. In the program config, you'll see port 5050, and should just leave that alone.  You've told the docker to point 49135 to 5050, so externally, you use 49135, which you say is working.  you're done, it works, enjoy!

Link to comment

if you currently have your downloads being downloaded to /mnt/cache/downloads, then yes, you have the download directory set "correctly".  The /path/to/tv/shows part is not going to work though; it needs a real path.

 

Personally, I removed both of those, and just use /mnt/user:/mnt/user for all my dockers, then I set the correct path to everything inside the config/setup of whatever program.  You can do it however you want, but I find having /mnt/user everywhere makes everything easier for me.  it's the same path in every program and in unRAID, and makes moving a config to another location/docker/container/VM/whatever that much easier.  everything knows what /mnt/user is, so that always works.

 

However, there are many ways to skin a cat

Link to comment

okay, so here is a bit more detail/explanation.  inside the docker container, the author has mapped a location from unRAID to /downloads and another to /tv so that when you run the program, it already knows where to put /downloads and /tv

 

You 'finish' that mapping with your run command with the information you put in front of :/downloads and :/tv

 

if you have SAB set to download your files to /mnt/cache/downloads and you use /mnt/user/video/tv (for example) to store your tv hows, then you could put

 

-v /mnt/cache/downloads:/downloads to tell this container/program that your downloads are stored at /mnt/cache/downloads.  This would make it so that you don't have to set anything inside the config of the program when you run/install it.  i'm sure this works fine, but it's not the way I, personally, want to do things.

 

I prefer to go into the config/setup and specify exactly where I want downloads going.  I may change my unRAID setup one day, and move my downloads from /mnt/cache/downloads to /mnt/disk1/downloads, or something else entirely.  If I should do that, I'll have to modify my run command to make that change.  if I do it the way I'm doing it now, I'll do that in the config of the program.

 

in addition, the way I'm doing it, I can see, instantly, where I'm mapping downloads, or tv shows, or anything else in the config file.  everything, everywhere, always starts with /mnt/user/ no matter where I look, or what I'm doing.  it's just 'easier' for me to do it this way.

 

Also, in SAB, for example, there are other paths that need to be set, like temporary download folder, watched folder, porst-processing scripts folder, and others.  I'm not really sure how the /downloads mapping affects those things.

 

I do know that if I use -v /mnt/user:/mnt/user as the ONLY mapping I do for ALL my dockers, then inside any of them, any path I need to set will always start with /mnt/user, and from there I can navigate exactly as I do inside unRAID.

 

For me, that just makes things more simple and predicatable.

 

There is no right or wrong way, but that's the way I prefer, and why.

 

I hope that helps.

 

Finally, don't just blindly copy anyone's suggested run command, or path, or script or anything.  ALWAYS look at it and try to understand it.  In the example you listed earlier there was "/path/to/tv/shows", which is clearly not a real or correct path.  It's meant as a placeholder and explanation of what you need to have there, not meant to be taken literally.  In this case, it's harmless as it just won't work, but in some cases, blindly copy/pasting can cause you real harm and system damage.  Just pay more attention, and think about what you're seeing and how it may need to be changed to your specific case.  In general, people will give general guidance/help, not specific to your exact case, so be careful.

Link to comment

I'm trying to install nzbdrone container via the Extended Docker Configuration plugin and the following error is returned:

 

Command: /usr/bin/docker run -d --name="nzbdrone" --net="bridge" -p 8989:8989/tcp -v "/mnt/cache/appdata/nzbdrone":"/config":rw -v "/mnt/cache/appdata/nzbdrone/downloads":"/downloads":rw -v "/etc/localtime":"/etc/localtime":ro needo/nzbdrone

Unable to find image 'needo/nzbdrone' locally 

Pulling repository needo/nzbdrone 

2014/07/04 10:27:48 Could not find repository on any of the indexed registries. 

The command failed.

 

I'm guessing that it is a permissions issue on my machine, so I attempt to follow this advice:

 

 

Check the permissions on your docker folder.  I was getting this too and I did:

 

chown -R root:root docker

chmod -R 755 docker

 

 

If I run either of these commands on my system it gets stuck and outputs a non-stop stream of this error message:

 

chmod: cannot access ‘docker/btrfs/subvolumes/5e66087f3ffe002664507d225d07b6929843c3f0299f5335a70c1727c8833737/bin/vdir’: Stale NFS file handle

 

Any ideas?

Link to comment

Got nzbget installed and running, but I can't get nzbdrone to communicate with it. When I attempt to add the Download Client, I run the test and every time I get [testnzbget Starting]. It won't finish the test, and nzbget is not talking to nzbdrone. How can I fix the problem? Thank you.

Link to comment

Got nzbget installed and running, but I can't get nzbdrone to communicate with it. When I attempt to add the Download Client, I run the test and every time I get [testnzbget Starting]. It won't finish the test, and nzbget is not talking to nzbdrone. How can I fix the problem? Thank you.

There's a bug that I'm hunting down where the little pop ups nzbdrone use don't update or go away as they should.

Link to comment

Got nzbget installed and running, but I can't get nzbdrone to communicate with it. When I attempt to add the Download Client, I run the test and every time I get [testnzbget Starting]. It won't finish the test, and nzbget is not talking to nzbdrone. How can I fix the problem? Thank you.

There's a bug that I'm hunting down where the little pop ups nzbdrone use don't update or go away as they should.

needo--->it works perfectly when using user as root. I don't know why either.

Link to comment

needo, thanks a lot for your hard work.Can I suggest that you use git PULL instead of clone in EDGE mode? It will consume a lot less time and bandwidth, and will practically have the same result.

 

he can't as it is now

as he installs the stable version first in the dockerfile

so there is not .git in opt/name of app

he could rewrite it to use git clone is no .git was found...

and use pull if .git was there....

but he will also have to remove the rm -rf /opt /name of app otherwise he will delet the .git file every time

 

Maybe if the script evaluate the existence of a prior git clone first. I was thinking in something like this:

 

#!/bin/bash
APP="couchpotato"
REPO="https://github.com/RuudBurger/CouchPotatoServer.git"

# Does the user want the latest version
if [ -z "$EDGE" ]; then
  echo "Bleeding edge not requested"
else
  apt-get install -qy git
  if [[ ! -d /opt/${APP} ]]; then
    mkdir -p /opt/${APP}
  fi
  cd /opt/${APP}
  git pull
  if [[ $? -ne 0 ]]; then
    cd /
    rm -rf /opt/${APP}
    git clone ${REPO} /opt/${APP}
    chown -R nobody:users /opt/${APP}
  fi
fi

 

It will try to do a git pull, and if it fails, will do a git clone. What do you think?

 

Link to comment

Justin...  I'm trying very much to understand this method of yours:

 

I do know that if I use -v /mnt/user:/mnt/user as the ONLY mapping I do for ALL my dockers, then inside any of them, any path I need to set will always start with /mnt/user, and from there I can navigate exactly as I do inside unRAID.

 

If you do this, wouldn't anything below /mnt/user become unavailable?  If someone wanted to put downloads (for example) ONLY onto the cache drive, wouldn't this mapping make this option impossible?

 

Could I bother you for a better example of how you would configure an app (like nzbget) to save downloaded files to the cache drive with -v /mnt/user:/mnt/user as the only mapping?

 

Maybe my mistake is that I have unraid configured to not 'use a cache disk'.  I think if I enable that option that folders on the cache drive are available under /mnt/user.  But, if I do that then unraid will try to sync contents of these folders with my array.

Link to comment

I managed to get nzbdrone to install with the following command:

 

docker run -d --name="nzbdrone" -v /mnt/cache/appdata/nzbdrone:/config -v /mnt/user:/mnt/user -v /etc/localtime:/etc/localtime:ro -p 8989:8989 needo/nzbdrone

 

It shows as running on the Docker extension page, but I can not browse to it on port 8989. 

 

I also noticed that there is no .conf file in /mnt/cache/appdata/nzbdrone, whereas, nzbget (also installed) does have a config file in /mnt/cache/appdata/nzbget.

 

Is there an issue with this container, or is my install command wrong?  I tried to uninstall/reinstall nzbdrone, but the issue persists.

 

EDIT:

The files and directories were actually there in /mnt/cache/appdata/nzbdrone.  Once I fixed permissions on the directory (according to Justin's instructions) everything showed up.  Now, I make a habit of recursively fixing the permissions on /mnt/cache/appdata after every new Docker container install.

 

Link to comment

Okay, I do have unRAID set to use a cache disc, so I'm not sure how unRAID acts when setup without using it.

 

So, when I do -v /mnt/user:/mnt/user I see all my user shares listed under /mnt/user, including any shares I have only on my cache disc.

 

For example, I use a folder called downloads on my cache drive, and I have that folder set to cache:only, meaning any files in that folder will not be moved off the cache drive onto my array by the mover script.

 

With this setup, I see /mnt/user/downloads in my docker programs, even though downloads is only on the cache drive (because any base level folders are automatically turned into user shares by unRAID).

 

Since you don't want to use the cache drive for unRAID, I suspect you could assign -v /mnt/cache:/mnt/cache instead of, or in addition to -v /mnt/user:/mnt/user to get direct access to the cache drive inside a docker program.

 

I hope that helps.

Link to comment

I managed to get nzbdrone to install with the following command:

 

docker run -d --name="nzbdrone" -v /mnt/cache/appdata/nzbdrone:/config -v /mnt/user:/mnt/user -v /etc/localtime:/etc/localtime:ro -p 8989:8989 needo/nzbdrone

 

It shows as running on the Docker extension page, but I can not browse to it on port 8989. 

 

I also noticed that there is no .conf file in /mnt/cache/appdata/nzbdrone, whereas, nzbget (also installed) does have a config file in /mnt/cache/appdata/nzbget.

 

Is there an issue with this container, or is my install command wrong?  I tried to uninstall/reinstall nzbdrone, but the issue persists.

 

You might consider installing and using the docker plugin, from another post in this forum.  It helps you get the commands right, and I think it also sets permissions correctly, which I suspect is your issue with not seeing the /appdata/nzbdrone config folder.

 

Here is my run command for nzbdrone, which seems to pretty much match yours.

 

docker run -d --name="nzbdrone" -v /mnt/cache/appdata/nzbdrone:/config -v /mnt/user:/mnt/user -v /etc/localtime:/etc/localtime:ro -p 9989:8989 needo/nzbdrone

 

maybe change it to

 

docker run -d --name="nzbdrone" -v /mnt/cache/appdata/nzbdrone:/config:rw -v /mnt/user:/mnt/user:rw -v /etc/localtime:/etc/localtime:ro -p 9989:8989 needo/nzbdrone

 

which is how the plugin amends it to get read/write permissions (I think)

Link to comment

I seem to have a problem with the mariadb image, everything worked fine with xmbc but then I suddenly gotten a connection error from a shared server. so I though I need to restart the maria server. so I stopped it and removed the image and then created it again, but now I cannot connect to it at all, it's running but I cannot connect to it, my database files still are on the /mnt/cache/appdata/mariadb

 

mariadb needo/mariadb:latest /sbin/my_init 14 seconds ago Up 13 seconds 0.0.0.0:3306->3306/tcp 7b65eaf228ae Remove

 

the logs show me this

 

Starting MariaDB...

140706 14:14:31 mysqld_safe Logging to syslog.

140706 14:14:31 mysqld_safe Starting mysqld daemon with databases from /db

140706 14:14:31 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Database exists.

Starting MariaDB...

140706 14:14:33 mysqld_safe Logging to syslog.

140706 14:14:33 mysqld_safe Starting mysqld daemon with databases from /db

140706 14:14:33 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Database exists.

Starting MariaDB...

140706 14:14:35 mysqld_safe Logging to syslog.

140706 14:14:35 mysqld_safe Starting mysqld daemon with databases from /db

140706 14:14:35 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Database exists.

Starting MariaDB...

140706 14:14:36 mysqld_safe Logging to syslog.

140706 14:14:36 mysqld_safe Starting mysqld daemon with databases from /db

140706 14:14:36 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

however it cannot connect on that port. Any suggestions in which log I could look why?

 

Thanks

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.