I wanted to run newsboat, a command-line RSS reader, in a Docker container on my Pixelbook. No biggie:
FROM alpine
RUN sed -i -e 's/v[[:digit:]]\.[[:digit:]]+/edge/g' /etc/apk/repositories && \
apk update && \
apk add newsboat && \
rm -rf /var/cache/apk/*
ENTRYPOINT ["newsboat"]
I set up a Docker Hub autobuild and created an alias:
alias newsboat="docker run --rm -ti \
-v ${HOME}/.newsboat:/root/.newsboat \
bakerba/newsboat"
I fired it up, opened the first article, hit o
to open it in Chrome, and…
nothing happened. I don’t know why I thought that would work, after all I just
tried to open up a new tab in the host of a container inside a container inside
a virtual machine.
Google failed me here. Or I failed at Google. I’m a Docker noob, is there a Docker idiom for accomplishing this? Do real programmers use lynx?
I learned that Project Crostini containers communicate with the host through a daemon called garcon. The garcon binaries are bind-mounted from the VM to Crostini containers, so I figured I could bind-mount them to my container as well:
alias newsboat="docker run --rm -ti \
-v ${HOME}/.newsboat:/root/.newsboat \
-v /opt/google/cros-containers:/opt/google/cros-containers:ro \
-v /dev/.host_ip:/dev/.host_ip \
-v /dev/.container_token:/dev/.container_token \
bakerba/newsboat"
And in my newsboat config:
browser "/opt/google/cros-containers/bin/garcon --client --url %u"
And voilà, my newsboat container can open a new tab in Chrome. Now on to mutt!