├── .dockerignore ├── defaults.list ├── java-webstart.desktop ├── start-firefox.sh ├── Dockerfile ├── bin └── firefox-java.sh ├── mozilla.cfg └── README.md /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | bin 3 | README.md 4 | -------------------------------------------------------------------------------- /defaults.list: -------------------------------------------------------------------------------- 1 | [Default Applications] 2 | application/x-java-jnlp-file=java-webstart.desktop 3 | -------------------------------------------------------------------------------- /java-webstart.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Encoding=UTF-8 3 | Name=Java Web Start 4 | Comment=Java Web Start 5 | Exec=/usr/bin/javaws %u 6 | Terminal=false 7 | Type=Application 8 | Icon=javaws 9 | Categories=Application;Network; 10 | MimeType=application/x-java-jnlp-file; 11 | -------------------------------------------------------------------------------- /start-firefox.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | [[ -z "$gid" ]] || groupmod --non-unique --gid $gid firefox 4 | [[ -z "$uid" && -z "$gid" ]] || usermod --non-unique --uid $uid --gid $gid firefox 5 | 6 | if [ -d /home/firefox/.mozilla ]; then 7 | chown -R firefox:firefox /home/firefox/.mozilla 8 | fi 9 | 10 | exec su -ls "/bin/bash" -c "/usr/bin/firefox -profile /home/firefox/.mozilla/firefox $URL" firefox 11 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:centos6 2 | 3 | MAINTAINER Uwe Grawert 4 | 5 | ARG JAVA_VERSION=1.8.0 6 | ARG FIREFOX_VERSION=52.8.0-1.el6.centos 7 | 8 | RUN yum install --assumeyes firefox-$FIREFOX_VERSION \ 9 | java-$JAVA_VERSION-openjdk \ 10 | libcanberra-gtk2 \ 11 | icedtea-web \ 12 | dbus-x11 13 | 14 | RUN groupadd firefox && \ 15 | useradd --home-dir /home/firefox --gid firefox firefox && \ 16 | mkdir -p /home/firefox/.local/share/applications && \ 17 | chown -R firefox:firefox /home/firefox && \ 18 | dbus-uuidgen > /var/lib/dbus/machine-id 19 | 20 | COPY start-firefox.sh / 21 | COPY --chown=firefox:firefox defaults.list /home/firefox/.local/share/applications 22 | COPY --chown=firefox:firefox java-webstart.desktop /home/firefox/.local/share/applications 23 | COPY mozilla.cfg /usr/lib64/firefox/defaults/preferences/all-redhat.js 24 | 25 | CMD ["/start-firefox.sh"] 26 | -------------------------------------------------------------------------------- /bin/firefox-java.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Put me into your PATH 4 | 5 | NAME="firefox-java" 6 | IMAGE="${IMAGE:-ugrawert/firefox-java}" 7 | X11_SOCKET="${X11_SOCKET:-/tmp/.X11-unix}" 8 | DOWNLOADS="${DOWNLOADS:-${HOME}/Downloads}" 9 | PROFILE="$PWD/.ff_profile" 10 | uid=${uid:-`id -u`} 11 | gid=${gid:-`id -g`} 12 | URL=${URL:-$1} 13 | 14 | case "$OSTYPE" in 15 | darwin*) 16 | xhost | grep -q 'localhost' || xhost +localhost 17 | DOCKER_DISPLAY="${DOCKER_DISPLAY:-host.docker.internal:0}" 18 | ;; 19 | *) 20 | DOCKER_DISPLAY="${DOCKER_DISPLAY:-unix${DISPLAY}}" 21 | ;; 22 | esac 23 | 24 | docker run --rm -ti \ 25 | -v "${PROFILE}:/home/firefox/.mozilla/firefox" \ 26 | -v "${DOWNLOADS}:/home/firefox/Downloads:rw" \ 27 | -v "${X11_SOCKET}:/tmp/.X11-unix" \ 28 | -e "DISPLAY=${DOCKER_DISPLAY}" \ 29 | -e "uid=${uid}" \ 30 | -e "gid=${gid}" \ 31 | -e "URL=${URL}" \ 32 | --name ${NAME} \ 33 | ${IMAGE} 34 | -------------------------------------------------------------------------------- /mozilla.cfg: -------------------------------------------------------------------------------- 1 | // default settings 2 | pref("app.update.autoUpdateEnabled", false); 3 | pref("app.update.enabled", false); 4 | pref("browser.display.use_system_colors", true); 5 | pref("browser.bookmarks.restore_default_bookmarks", false); 6 | pref("browser.shell.checkDefaultBrowser", false); 7 | pref("browser.startup.page", 0); 8 | pref("browser.tabs.warnOnClose", false); 9 | pref("datareporting.healthreport.uploadEnabled", false); 10 | pref("datareporting.healthreport.service.enabled",false); 11 | pref("distribution.canonical.bookmarksProcessed", false); 12 | pref("extensions.update.autoUpdate", false); 13 | pref("extensions.update.enabled", false); 14 | pref("general.smoothScroll", true); 15 | pref("intl.accept_languages", "en"); 16 | pref("intl.charsetmenu.browser.cache", "ISO-8859-1, UTF-8"); 17 | pref("intl.locale.matchOS", true); 18 | pref("layout.spellcheckDefault", 0); 19 | pref("security.warn_entering_secure", false); 20 | pref("security.warn_entering_secure.show_once", false); 21 | pref("security.warn_entering_weak", false); 22 | pref("security.warn_entering_weak.show_once", false); 23 | pref("security.warn_leaving_secure", false); 24 | pref("security.warn_leaving_secure.show_once", false); 25 | pref("security.warn_submit_insecure", false); 26 | pref("security.warn_submit_insecure.show_once", false); 27 | pref("security.warn_viewing_mixed", false); 28 | pref("security.warn_viewing_mixed.show_once", false); 29 | pref("signon.rememberSignons", true); 30 | pref("startup.homepage_welcome_url", "about:blank"); 31 | pref("startup.homepage_override_url", "about:blank"); 32 | pref("toolkit.crashreporter.enabled", false); 33 | pref("toolkit.networkmanager.disable", false); 34 | 35 | /* Workaround for rhbz#1110291 */ 36 | pref("network.negotiate-auth.allow-insecure-ntlm-v1", true); 37 | /* Workaround for mozbz#1063315 */ 38 | pref("security.use_mozillapkix_verification", false); 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker image with Firefox and Java Webstart support 2 | 3 | This image launches Firefox with support for Java Webstart applications. 4 | 5 | ## Versions 6 | 7 | | App | Version | 8 | | ------- | ------- | 9 | | Firefox | 52.8.0 | 10 | | Java | 1.8.0 | 11 | 12 | ## Setup 13 | 14 | ```sh 15 | docker pull ugrawert/firefox-java:latest 16 | ``` 17 | 18 | ## Environment variables 19 | 20 | The following environment variables can be passed via `docker run -e`. 21 | 22 | | Variable | Explanation | Example | 23 | | --------- | --------------------------- | ------------------------ | 24 | | DISPLAY | The X11 display port to use | `DISPLAY=:1` | 25 | | URL | Firefox opens this URL | `URL=http://google.com/` | 26 | | uid | Run Firefox with this uid | `uid=$(id -u)` | 27 | | gid | Run Firefox with this gid | `gid=$(id -g)` | 28 | 29 | ## Run 30 | 31 | ```sh 32 | URL=https://remote-board/; 33 | docker run --rm -ti \ 34 | -v "$PWD/.ff_profile:/home/firefox/.mozilla/firefox" \ 35 | -v "${HOME}/Downloads:/home/firefox/Downloads:rw" \ 36 | -v "/tmp/.X11-unix:/tmp/.X11-unix" \ 37 | -e "DISPLAY=unix${DISPLAY}" \ 38 | -e "uid=$(id -u)" \ 39 | -e "gid=$(id -g)" \ 40 | -e "URL=${URL}" \ 41 | ugrawert/firefox-java 42 | ``` 43 | 44 | ### MacOS 45 | 46 | ```sh 47 | xhost +localhost 48 | ``` 49 | 50 | ```sh 51 | URL=https://remote-board/; 52 | docker run --rm -ti \ 53 | -v "$PWD/.ff_profile:/home/firefox/.mozilla/firefox" \ 54 | -v "${HOME}/Downloads:/home/firefox/Downloads:rw" \ 55 | -v "/tmp/.X11-unix:/tmp/.X11-unix" \ 56 | -e "DISPLAY=host.docker.internal:0" \ 57 | -e "uid=$(id -u)" \ 58 | -e "gid=$(id -g)" \ 59 | -e "URL=${URL}" \ 60 | ugrawert/firefox-java 61 | ``` 62 | 63 | ## Proxy settings 64 | 65 | To configure global proxy settings for Firefox, place and adjust the following 66 | content into your working directory. 67 | 68 | proxy.js: 69 | 70 | ```javascript 71 | pref("network.proxy.http", "proxy.server.local"); 72 | pref("network.proxy.http_port", 8080); 73 | pref("network.proxy.ssl", "proxy.server.local"); 74 | pref("network.proxy.ssl_port", 8080); 75 | pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, *.server.local"); 76 | pref("network.proxy.type", 1); 77 | pref("network.proxy.share_proxy_settings", true); 78 | ``` 79 | 80 | ```sh 81 | docker run -v "$PWD/proxy.js:/etc/firefox/pref/proxy.js" .. 82 | ``` 83 | 84 | ## Custom preferences 85 | 86 | You can add your custom preferences file by overriding the default preferences. 87 | 88 | ```shell 89 | docker run -v "mozilla.cfg:/usr/lib64/firefox/defaults/preferences/all-redhat.js" 90 | ``` 91 | 92 | ## Problems 93 | 94 | ### vsyscall is disabled on some Linux distributions 95 | 96 | The glibc version used in the container is utilizing vsyscall. On recent Linux 97 | distributions like Debian, vsyscall is disabled. 98 | 99 | To enable vsyscall, add the following parameter to your Kernel parameter list 100 | at `/etc/default/grub.conf`. 101 | 102 | ``` 103 | GRUB_CMDLINE_LINUX_DEFAULT="vsyscall=emulate" 104 | ``` 105 | 106 | ### IcedTea cannot run Java application 107 | 108 | If you cannot run the Java application from within Firefox, you can still 109 | try to run `javaws` from command line. 110 | 111 | Instead of opening the JNLP file (the default), you can save the file to 112 | `/home/firefox/Downloads` and then close Firefox. 113 | 114 | Run the following command to run `javaws` command instead of Firefox. 115 | 116 | ``` 117 | docker run --rm -ti \ 118 | -v "${HOME}/Downloads:/home/firefox/Downloads:rw" \ 119 | -v "/tmp/.X11-unix:/tmp/.X11-unix" \ 120 | -e "DISPLAY=unix${DISPLAY}" \ 121 | -e "uid=$(id -u)" \ 122 | -e "gid=$(id -g)" \ 123 | ugrawert/firefox-java javaws /home/firefox/Downloads/launch.jpnl 124 | ``` 125 | --------------------------------------------------------------------------------