Skip to content

antlafarge/jdownloader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JDownloader 2

Docker JDownloader 2 headless image with automatic updates.

There is no embedded graphical interface, you should manage your downloads through the official JDownloader web interface here : https://my.jdownloader.org.

Dockerhub repository : https://hub.docker.com/r/antlafarge/jdownloader.
Github repository : https://github.com/antlafarge/jdownloader.
You can report issues in the github issues.
You can send feedback and discuss the project in the github discussions.

Supported architectures and Tags

arch \ tags latest
ubuntu
ubuntu-openjdk21
openjdk21
alpine
alpine-openjdk21
linux/amd64 OK OK
linux/arm/v7 OK NA
linux/arm64/v8 OK OK
linux/ppc64le Need feedback Need feedback
linux/riscv64 NA Need feedback
linux/s390x Need feedback Need feedback

Other available tags :

services:
  jdownloader:
    image: antlafarge/jdownloader:<TAG>
    container_name: <CONTAINER-NAME> # Optional
    restart: <RESTART> # Optional
    user: <UID>:<GID> # Optional
    volumes:
      - "<DOWNLOADS-PATH>:/jdownloader/downloads/"
      - "<CONFIG-PATH>:/jdownloader/cfg/" # Optional
      - "<LOGS-PATH>:/jdownloader/logs/" # Optional
    environment:
      JD_EMAIL: "<JD-EMAIL>" # Optional (better to use secrets)
      JD_PASSWORD: "<JD-PASSWORD>" # Optional (better to use secrets)
      JD_DEVICENAME: "<JD-DEVICENAME>" # Optional
      UMASK: "<UMASK>" # Optional
      JAVA_OPTIONS: "<JAVA-OPTIONS>" # Optional
      LOG_FILE: "<LOG-FILE>" # Optional
    secrets:
        - JD_EMAIL
        - JD_PASSWORD
        - JD_DEVICENAME # Optional
    ports:
      - <PORT>:3129 # Optional

secrets:
    JD_EMAIL:
        file: "<JD-EMAIL-FILE>" # Put your myJD email in this file
    JD_PASSWORD:
        file: "<JD-PASSWORD-FILE>" # Put your myJD password in this file
    JD_DEVICENAME: # Optional
        file: "<JD-DEVICENAME-FILE>" # Put your myJD device name in this file
See example
services:
  jdownloader:
    image: antlafarge/jdownloader:latest
    container_name: jdownloader
    restart: on-failure:3
    user: 1000:100
    volumes:
      - "/hdd/JDownloader/downloads/:/jdownloader/downloads/"
      - "/hdd/JDownloader/cfg/:/jdownloader/cfg/"
    secrets:
        - JD_EMAIL
        - JD_PASSWORD
        - JD_DEVICENAME
    ports:
      - 3129:3129

secrets:
    JD_EMAIL:
        file: "/hdd/JDownloader/secrets/JD_EMAIL.txt"
    JD_PASSWORD:
        file: "/hdd/JDownloader/secrets/JD_PASSWORD.txt"
    JD_DEVICENAME:
        file: "/hdd/JDownloader/secrets/JD_DEVICENAME.txt"

Parameters

Name Type Description Optional Default
<TAG> Tag Docker hub tag. Optional latest
<CONTAINER-NAME> Name Container name. Recommended Random
<RESTART> Restart Container restart policy.
Use on-failure to have a correct behavior of Restart, Close and Shutdown buttons in the JDownloader settings.
Recommended no
<UID> User Owner user ID of the files and directories created.
Use the command id -u in your shell to get your current user id.
Recommended 0 (root)
<GID> User Owner group ID of the files and directories created.
Use the command id -g in your shell to get your current groud id.
Recommended 0 (root)
<DOWNLOADS-PATH> Volume Directory where your downloads will be stored on your host machine.
If you use the user parameter, check the permissions of the directories you mount as volumes.
REQUIRED
<CONFIG-PATH> Volume Directory where the JDownloader settings files will be stored on your host machine.
If you use the user parameter, check the permissions of the directories you mount as volumes.
Recommended In container
<LOGS-PATH> Volume Directory where the JDownloader log files will be stored on your host machine.
If you use the user parameter, check the permissions of the directories you mount as volumes.
Not recommended In container
<JD-EMAIL-FILE> Secret The path to the docker secret file where your myJDownloader e-mail is saved. REQUIRED
<JD-PASSWORD-FILE> Secret The path to the docker secret file where your myJDownloader password is saved. REQUIRED
<JD-DEVICENAME-FILE> Secret The path to the docker secret file where your myJDownloader device name is saved. Optional (hostname)
<JAVA-OPTIONS> Env Java options.
Use -Xms128m -Xmx1g to change initial and max Java heap size memory.
Optional Empty
<UMASK> Env Change the umask. Optional No change
<JD-DEVICENAME> Env Device name in your myJDownloader web interface. Optional Hostname
<JD-EMAIL> Env Your myJDownloader e-mail.
I recommend to use the docker secrets (cf. <JD-EMAIL-FILE>).
Not recommended
<JD-PASSWORD> Env Your myJDownloader password.
I recommend to use the docker secrets (cf. <JD-PASSWORD-FILE>).
Not recommended
<LOG-FILE> Env Write JDownloader logs from java command in a file.
You should use the volume parameter <LOGS-PATH> to access these log files from the host machine.
Useful if you want to investigate any issues with JDownloader.
Example : "/jdownloader/logs/jd.docker.log".
Not recommended /dev/null
<PORT> Port Network port used for Direct connection mode. Optional Not exposed
See Docker run=
docker run -d \
        --name <CONTAINER-NAME> \
        --restart <RESTART> \
        --user <UID>:<GID> \
    -v "<DOWNLOADS-PATH>:/jdownloader/downloads/" \
        -v "<CONFIG-PATH>:/jdownloader/cfg/" \
        -v "<LOGS-PATH>:/jdownloader/logs/" \
    -v "<JD-EMAIL-FILE>:/run/secrets/JD_EMAIL" \
    -v "<JD-PASSWORD-FILE>:/run/secrets/JD_PASSWORD" \
        -e JD_EMAIL="<JD-EMAIL>" \
        -e JD_PASSWORD="<JD-PASSWORD>" \
        -e JD_DEVICENAME="<JD-DEVICENAME>" \
        -e JAVA_OPTIONS="<JAVA-OPTIONS>" \
        -e LOG_FILE="<LOG-FILE>" \
        -e UMASK="<UMASK>" \
        -p <PORT>:3129 \
    antlafarge/jdownloader:<TAG>

Note : Parameters indented twice are optional.
Volumes are used to simulate secrets without the need to create docker swarm secrets.

Example :

echo "my@email.com" > ./JD_EMAIL.txt
echo "MyPassword" > ./JD_PASSWORD.txt

docker run -d \
        --name jdownloader \
        --restart on-failure:3 \
        --user 1000:100 \
    -v "/hdd/JDownloader/downloads/:/jdownloader/downloads/" \
        -v "/hdd/JDownloader/cfg/:/jdownloader/cfg/" \
    -v "./JD_EMAIL.txt:/run/secrets/JD_EMAIL" \
    -v "./JD_PASSWORD.txt:/run/secrets/JD_PASSWORD" \
        -e JD_DEVICENAME="JD-DOCKER" \
        -p 3129:3129 \
    antlafarge/jdownloader:latest

Guides

Setup

  • Go to my.jdownloader.org and create an account.
  • If you want to run the container as an unprivileged user, use the user parameter and check the access permissions of the directories you mount as volumes
    • Create the downloads directory : mkdir /path/to/jdownloader/downloads/
    • Setup the user and group owners : sudo chown -R 1000:100 /path/to/jdownloader/downloads/
      • You can get your User ID (UID) by using : id -u
      • You can get your User Group ID (GID) by using : id -g
        • I recommend to use 100 as GID (users group), because every users should be in this group, and it will be easier to manage multi-users privileges.
    • Setup the downloads directory access permissions : sudo chmod -R 770 /path/to/jdownloader/downloads/
    • Setup the config directory access permissions : sudo chmod -R 770 /path/to/jdownloader/cfg/
    • Setup the secrets directory access permissions : sudo chmod -R 770 /path/to/jdownloader/secrets/
      • Create the secret file for your JD e-mail : echo 'my@email.com' > /path/to/jdownloader/secrets/JD_EMAIL.txt
      • Create the secret file for your JD password : echo 'MyGreatPassword' > /path/to/jdownloader/secrets/JD_PASSWORD.txt
      • Create the secret file for your JD device name : echo 'JD-DOCKER' > /path/to/jdownloader/secrets/JD_DEVICENAME.txt
  • Run the container by choosing the docker run or docker compose method and customize the parameters by using your myJDownloader credentials.
    • You can check the container logs : docker logs --follow --tail 100 jdownloader (CTRL + C to quit)
  • Wait some minutes for JDownloader to update and be available in your myJDownloader web interface.

Update JDownloader

JDownloader will update itself automatically when it is idle (every 12 hours), so you have nothing to do.
To disable the automatic upates, go to your JD instance on my.jdownloader.org, and go to Settings / Event Scripter and switch from Enabled to Disabled.

Update the image

The dockerhub image is rebuilt monthly to get last OS and packages security updates.

  • Docker compose method :
    • Update the image : docker compose pull jdownloader
    • Recreate the container : docker compose up -d --force-recreate jdownloader
    • Remove the old untagged images : docker image prune -f
  • Docker run method :
    • Update the image : docker pull antlafarge/jdownloader:latest
    • Remove the current container : docker rm -f jdownloader
    • Remove the old untagged images : docker image prune -f
    • Start the container : docker run ...

Special characters in password

  • If you used the docker secrets, put the raw password in the secret file without escaping any character.
  • If you want to use environment variables.
    • Docker-compose.yml file :
      • Escape double quotes (") with backslashes (\)
        • JD_PASSWORD="My\"Great`Password"
    • Docker run command :
      • If you have exclamation marks (!) in your password and you use a bash shell, this special character corresponds to commands history substitution. You might need to disable it :
        • Type the command set +H in your bash shell.
      • Escape double quotes (") or backticks (`) with backslashes (\)
        • JD_PASSWORD="My\"Great\`Password"
  • If you want to put your password manually in the settings file :
    • Modify your docker-compose.yml file or docker run command parameters :
      • Set an empty <JD_PASSWORD> (for disabling password replacement on container start) :
        • JD_PASSWORD=""
      • Set a <CONFIG-PATH> volume to have an access to the JDownloader settings files.
    • Start the container.
    • Go to your config directory and open the settings file named org.jdownloader.api.myjdownloader.MyJDownloaderSettings.json.
    • Search for the password field and place your password in the empty double quotes. "password":"MyGreatPassword",
      • Escape double quotes (") with backslashes (\).
        • "password":"My\"Great`Password",
    • Save the file and restart the container. docker restart jdownloader

Troubleshooting

Files permissions issue

Check the user you use to run the container (with user parameter) can read and write the directories you created and you mounted as volumes.
Read carefully the Setup guide and follow the steps.
Or run the container as root (remove user parameter).

Armhf libseccomp2 issue

If you run the image on an armhf host (arm/v7), you may encounter many command errors (wait, sleep, curl, date)
This may be resolved by upgrading the libseccomp2 library (docker dependency).
First you should try to upgrade your system by using the usual method.
If this upgrade didn't resolve the problem, add the backports repo for debian buster and update :

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC 648ACFD622F3D138  
echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee -a /etc/apt/sources.list.d/buster-backports.list  
sudo apt update  
sudo apt install -t buster-backports libseccomp2

Docker privileges

If many internal commands fail, your container may lack some privileges and you can try the --privileged flag.

Nothing worked / another issue

You can report issues in the github issues.
You can send feedback and discuss the project in the github discussions.

Docker commands reminder

Container stop

docker stop jdownloader

Container restart

docker restart jdownloader

Container logs

docker logs --follow --tail 100 jdownloader

Note: To access the JDownloader log files, you have to set the <LOGS-PATH> volume.

Container delete

docker rm -f jdownloader

Image delete

docker rmi antlafarge/jdownloader:openjdk17

Compose start

cd /path/to/docker-compose.yml/directory/
docker compose up -d

Compose stop

cd /path/to/docker-compose.yml/directory/
docker compose down