
<feed xmlns="http://www.w3.org/2005/Atom">
    <generator>Hugo -- gohugo.io</generator>
    <title>
                docker on
            
        
        The Neo-Babbage Files</title>
        <link href="https://babbagefiles.xyz/categories/docker/atom.xml" rel="self" type="application/atom+xml" /><link href="https://babbagefiles.xyz/categories/docker/"/>
    <updated>2025-12-29T11:00:32+00:00</updated>
    <author>
            <name>Benjamin Slade</name>
            
                <email>slade@lambda-y.net</email>
            </author>
    <id>https://babbagefiles.xyz/categories/docker/</id>
        
        <entry>
            <title type="html"><![CDATA[Dockerised Firefox on GuixSD]]></title>
            <link href="https://babbagefiles.xyz/dockerised_firefox_guix/"/>
            <id>https://babbagefiles.xyz/dockerised_firefox_guix/</id>
            
                    <author>
                        <name>Benjamin Slade</name>
                    </author>
            <published>2018-09-15T20:18:00-06:00</published>
            <updated>2018-09-15T20:29:22-06:00</updated>
            
            
            <content type="html"><![CDATA[<p>So GuixSD doesn&rsquo;t currently package Firefox (<a href="https://lists.gnu.org/archive/html/guix-devel/2018-05/msg00021.html">though hopefully that
is changing</a>), but only IceCat (which is now EOL). On freenode#guix,
pkill9 suggested that Firefox (and Chromium etc.) could be installed
on Guix via the <a href="https://nixos.org/nix/download.html">Nix</a> installer (install as per instructions on their
site and then <code>nix-env -i firefox</code>) with the following trick, create a
file <code>~/.local/bin/firefox</code> with the following content:</p>
<div class="highlight"><pre class="chroma"><code class="language-shell" data-lang="shell"><span class="c1"># Wrapper to run the Firefox built and packaged by Nix</span>
<span class="nv">MESA_LIB</span><span class="o">=</span><span class="k">$(</span>dirname <span class="k">$(</span>realpath /run/current-system/profile/lib/libGL.so<span class="k">))</span> <span class="c1">#To get webgl working</span>
<span class="nb">export</span> <span class="nv">LD_LIBRARY_PATH</span><span class="o">=</span><span class="s2">&#34;</span><span class="nv">$MESA_LIB</span><span class="si">${</span><span class="nv">LD_LIBRARY_PATH</span><span class="p">:+:</span><span class="si">}</span><span class="nv">$LD_LIBRARY_PATH</span><span class="s2">&#34;</span>
<span class="c1">#export FONTCONFIG_PATH=&#34;$(guix build fontconfig)/etc/fonts${FONTCONFIG_PATH:+:}$FONTCONFIG_PATH&#34;</span>
<span class="nb">export</span> <span class="nv">FONTCONFIG_PATH</span><span class="o">=</span><span class="s2">&#34;</span><span class="k">$(</span>guix build fontconfig<span class="k">)</span><span class="s2">/etc/fonts&#34;</span>
<span class="nb">exec</span> -a <span class="s2">&#34;</span><span class="nv">$0</span><span class="s2">&#34;</span> <span class="s2">&#34;/nix/var/nix/profiles/per-user/</span><span class="nv">$USER</span><span class="s2">/profile/bin/firefox&#34;</span> <span class="s2">&#34;</span><span class="nv">$@</span><span class="s2">&#34;</span>
</code></pre></div><p>And then add <code>~/.local/bin</code> to your <code>$PATH</code> in <code>~/.profile</code>.</p>
<p>Unfortunately I haven&rsquo;t been able to get that to work, though I could
be doing something daft.</p>
<p>I figured out the following (elaborate) alternative workaround for
Firefox (no luck for Chromium):</p>
<ul>
<li>
<ol>
<li>Install Docker via Nix. Launch with <code>sudo dockerd</code>.</li>
</ol>
</li>
<li>
<ol start="2">
<li>Create a Dockerfile for Firefox</li>
</ol>
</li>
</ul>
<div class="highlight"><pre class="chroma"><code class="language-Dockerfile" data-lang="Dockerfile"><span class="c"># firefox in a docker container</span><span class="err">
</span><span class="err"></span><span class="c"># the following line will start firefox in the container, thus</span><span class="err">
</span><span class="err"></span><span class="c"># video and sound will be played on the host machine</span><span class="err">
</span><span class="err"></span><span class="k">FROM</span><span class="s"> alpine:edge</span><span class="err">
</span><span class="err"></span><span class="k">MAINTAINER</span><span class="s"> slade@jnanam.net</span><span class="err">
</span><span class="err">
</span><span class="err"></span><span class="c"># add testing repo + install packages + add user and group</span><span class="err">
</span><span class="err"></span><span class="k">RUN</span> <span class="nb">echo</span> <span class="s2">&#34;http://dl-cdn.alpinelinux.org/alpine/edge/testing/&#34;</span> &gt;&gt; /etc/apk/repositories <span class="se">\
</span><span class="se"></span>    <span class="o">&amp;&amp;</span> apk add --no-cache <span class="se">\
</span><span class="se"></span>       xz <span class="se">\
</span><span class="se"></span>       dbus-x11 <span class="se">\
</span><span class="se"></span>       ttf-dejavu <span class="se">\ </span>         <span class="c1"># a bunch of fonts; you may not want all of these</span><span class="err">
</span><span class="err"></span>       ttf-freefont <span class="se">\
</span><span class="se"></span>       ttf-ubuntu-font-family <span class="se">\
</span><span class="se"></span>       font-noto <span class="se">\
</span><span class="se"></span>       font-noto-extra <span class="se">\
</span><span class="se"></span>       font-noto-emoji <span class="se">\
</span><span class="se"></span>       font-noto-oriya <span class="se">\
</span><span class="se"></span>       font-noto-tamil <span class="se">\
</span><span class="se"></span>       font-noto-avestan <span class="se">\
</span><span class="se"></span>       font-noto-gothic <span class="se">\
</span><span class="se"></span>       font-noto-myanmar <span class="se">\
</span><span class="se"></span>       font-noto-telugu <span class="se">\
</span><span class="se"></span>       font-noto-deseret <span class="se">\
</span><span class="se"></span>       font-noto-bengali <span class="se">\
</span><span class="se"></span>       font-noto-kannada <span class="se">\
</span><span class="se"></span>       font-noto-ethiopic <span class="se">\
</span><span class="se"></span>       font-noto-armenian <span class="se">\
</span><span class="se"></span>       font-noto-tibetan <span class="se">\
</span><span class="se"></span>       font-noto-sinhala <span class="se">\
</span><span class="se"></span>       font-noto-gurmukhi <span class="se">\
</span><span class="se"></span>       font-noto-malayalam <span class="se">\
</span><span class="se"></span>       font-noto-gujarati <span class="se">\
</span><span class="se"></span>       font-noto-devanagari <span class="se">\
</span><span class="se"></span>       font-noto-thai <span class="se">\
</span><span class="se"></span>       font-noto-adlam <span class="se">\
</span><span class="se"></span>       font-noto-nko <span class="se">\
</span><span class="se"></span>       font-noto-lisu <span class="se">\
</span><span class="se"></span>       font-noto-carian <span class="se">\
</span><span class="se"></span>       font-noto-buhid <span class="se">\
</span><span class="se"></span>       font-noto-osage <span class="se">\
</span><span class="se"></span>       font-noto-hebrew <span class="se">\
</span><span class="se"></span>       font-noto-arabic <span class="se">\
</span><span class="se"></span>       font-noto-chakma <span class="se">\
</span><span class="se"></span>       font-noto-gothic <span class="se">\
</span><span class="se"></span>       font-noto-khmer <span class="se">\
</span><span class="se"></span>       font-noto-cypriot <span class="se">\
</span><span class="se"></span>       font-noto-kayahli <span class="se">\
</span><span class="se"></span>       font-noto-mandaic <span class="se">\
</span><span class="se"></span>       font-noto-olchiki <span class="se">\
</span><span class="se"></span>       font-noto-thaana <span class="se">\
</span><span class="se"></span>       font-noto-georgian <span class="se">\
</span><span class="se"></span>       font-noto-shavian <span class="se">\
</span><span class="se"></span>       font-noto-cherokee <span class="se">\
</span><span class="se"></span>       font-noto-oldturkic <span class="se">\
</span><span class="se"></span>       font-noto-osmanya <span class="se">\
</span><span class="se"></span>       font-noto-glagolitic <span class="se">\
</span><span class="se"></span>       font-noto-tifinagh <span class="se">\
</span><span class="se"></span>       font-noto-adlamunjoined <span class="se">\
</span><span class="se"></span>       font-noto-nko <span class="se">\
</span><span class="se"></span>       font-noto-lao <span class="se">\
</span><span class="se"></span>       arc-theme <span class="se">\
</span><span class="se"></span>       hunspell <span class="se">\
</span><span class="se"></span>       hunspell-en <span class="se">\
</span><span class="se"></span>       firefox <span class="se">\
</span><span class="se"></span>       libcanberra-gtk2 <span class="se">\
</span><span class="se"></span>       pulseaudio <span class="se">\
</span><span class="se"></span>    <span class="o">&amp;&amp;</span> rm -fr /var/cache/apk/* <span class="se">\
</span><span class="se"></span>    <span class="o">&amp;&amp;</span> adduser -D -u <span class="m">1000</span> -g <span class="m">1000</span> user<span class="err">
</span><span class="err">
</span><span class="err"></span><span class="c"># add user&#39;s work</span><span class="err">
</span><span class="err"></span><span class="k">WORKDIR</span><span class="s"> /home/user</span><span class="err">
</span><span class="err">
</span><span class="err"></span><span class="c"># switch to user</span><span class="err">
</span><span class="err"></span><span class="k">USER</span><span class="s"> user</span><span class="err">
</span><span class="err">
</span><span class="err"></span><span class="k">ENTRYPOINT</span> <span class="p">[</span><span class="s2">&#34;/usr/bin/firefox&#34;</span><span class="p">,</span> <span class="s2">&#34;--no-remote&#34;</span><span class="p">]</span><span class="err">
</span></code></pre></div><p>Save the above out to a file <code>Dockerfile</code> in some directory. <code>cd</code> to
that directory. Then create a Docker container with <code>docker build -t someprefix/firefox .</code> (with <code>someprefix</code> being whatever you like).</p>
<ul>
<li>
<ol start="3">
<li>Create in <code>~/.local/bin/firefox</code>:</li>
</ol>
</li>
</ul>
<div class="highlight"><pre class="chroma"><code class="language-shell" data-lang="shell"><span class="cp">#!/bin/sh
</span><span class="cp"></span><span class="c1"># Wrapper to run the Chromium built and packaged by Nix</span>
xhost +local:docker@<span class="p">;</span> <span class="se">\
</span><span class="se"></span>docker run --rm -it -e <span class="nv">DISPLAY</span><span class="o">=</span><span class="nv">$DISPLAY</span> -v /tmp/.X11-unix/:/tmp/.X11-unix <span class="se">\
</span><span class="se"></span>-v /dev/snd:/dev/snd <span class="se">\
</span><span class="se"></span>-v /run/user/<span class="nv">$USER_UID</span>/pulse:/run/pulse:ro <span class="se">\
</span><span class="se"></span>-v /home/<span class="nv">$USER</span>/.mozilla:/home/user/.mozilla <span class="se">\
</span><span class="se"></span>-v /home/<span class="nv">$USER</span>/.cache/mozilla:/home/user/.cache/mozilla <span class="se">\
</span><span class="se"></span>-v /tmp/Downloads:/tmp/Downloads <span class="se">\
</span><span class="se"></span>-v /home/<span class="nv">$USER</span>/.gtkrc-2.0:/home/user/.gtkrc-2.0 <span class="se">\
</span><span class="se"></span>-v /home/<span class="nv">$USER</span>/.config/gtk-3.0/:/home/user/.config/gtk-3.0 <span class="se">\
</span><span class="se"></span>-v /home/<span class="nv">$USER</span>/.nix-profile/share/fonts/truetype:/usr/share/fonts/truetype-nix <span class="se">\ </span><span class="c1"># for nix fonts, if you have them here</span>
-v /home/<span class="nv">$USER</span>/.nix-profile/share/fonts/ubuntu:/usr/share/fonts/ubuntu-nix <span class="se">\ </span>    <span class="c1"># ditto</span>
-v /home/<span class="nv">$USER</span>/.nix-profile/share/fonts/noto:/usr/share/fonts/noto-nix <span class="se">\ </span>        <span class="c1"># ditto</span>
-v /home/<span class="nv">$USER</span>/.guix-profile/share/fonts/truetype:/user/share/fonts/truetype-guix <span class="se">\ </span><span class="c1"># for guix fonts, if you have them here</span>
-v /home/<span class="nv">$USER</span>/.guix-profile/share/fonts/opentype:/usr/share/fonts/opentype-guix <span class="se">\ </span><span class="c1"># ditto</span>
 --shm-size 2g  --privileged someprefix/firefox  <span class="c1"># substitute your prefix here for &#34;someprefix&#34;</span>
</code></pre></div><p>Where again <code>someprefix</code> is whatever you chose before. <code>chmod +x ~/.local/bin/firefox</code> and then you can run Firefox with
<code>firefox</code>. (You&rsquo;ll have to make sure <code>dockerd</code> is running.)</p>
<p>Perhaps this could be useful elsewhere. It has the advantage of being
a nice <a href="https://alpinelinux.org/">Alpine Linux</a> <a href="https://www.musl-libc.org/">musl-libc</a>/<a href="https://www.libressl.org/">libressl</a> build of Firefox running inside
your GuixSD (or whatever you&rsquo;re using).</p>
<p>What doesn&rsquo;t work:</p>
<ul>
<li>Spellchecking - I don&rsquo;t quite know why, hunspell should be
available. Just disable spellchecking for now (otherwise everything
will be underlined in red).</li>
<li><a href="https://wire.com">Wire</a>&lsquo;s web portal.</li>
<li>Saving or uploading from anywhere but <code>/tmp/Downloads</code> (but this is
a feature really).</li>
<li>If you want CJK fonts, you&rsquo;ll have to install them in Nix or Guix
(Alpine doesn&rsquo;t seem to have any); this is indicated in the Firefox
launch script above.</li>
</ul>
]]></content>
            
                 
                    
                         
                        
                            
                             
                                <category scheme="https://babbagefiles.xyz/categories/lisp" term="lisp" label="lisp" />
                             
                                <category scheme="https://babbagefiles.xyz/categories/guix" term="guix" label="guix" />
                             
                                <category scheme="https://babbagefiles.xyz/categories/docker" term="docker" label="docker" />
                             
                                <category scheme="https://babbagefiles.xyz/categories/firefox" term="firefox" label="firefox" />
                            
                        
                    
                 
                    
                 
                    
                
            
        </entry>
    
</feed>
