Closed rhysxevans closed 2 years ago
I can do this with a Dockerfile along the lines of (Please note I have found most of the code for this from other repos), but would like to add a web access etc for this
FROM ubuntu:bionic
RUN apt-get update; apt-get clean
# Add a user for running applications.
RUN useradd apps
RUN mkdir -p /home/apps && chown apps:apps /home/apps
# Install x11vnc.
RUN apt-get install -y x11vnc
# Install xvfb.
RUN apt-get install -y xvfb
# Install fluxbox.
RUN apt-get install -y fluxbox
# Install wget.
RUN apt-get install -y wget
# Install wmctrl.
RUN apt-get install -y wmctrl
RUN apt-get install -y gnupg
# Set the Chrome repo.
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
# Install Chrome.
RUN apt-get update && apt-get -y install google-chrome-stable
COPY bootstrap.sh /
COPY app /
RUN chmod +x /app
RUN chmod +x /bootstrap.sh
CMD '/bootstrap.sh'
and bootstrap.sh
#!/bin/bash
# Based on: http://www.richud.com/wiki/Ubuntu_Fluxbox_GUI_with_x11vnc_and_Xvfb
readonly G_LOG_I='[INFO]'
readonly G_LOG_W='[WARN]'
readonly G_LOG_E='[ERROR]'
main() {
launch_xvfb
launch_window_manager
run_vnc_server
}
launch_xvfb() {
# Set defaults if the user did not specify envs.
export DISPLAY=${XVFB_DISPLAY:-:1}
local screen=${XVFB_SCREEN:-0}
local resolution=${XVFB_RESOLUTION:-1280x1024x24}
local timeout=${XVFB_TIMEOUT:-5}
# Start and wait for either Xvfb to be fully up or we hit the timeout.
Xvfb ${DISPLAY} -screen ${screen} ${resolution} &
local loopCount=0
until xdpyinfo -display ${DISPLAY} > /dev/null 2>&1
do
loopCount=$((loopCount+1))
sleep 1
if [ ${loopCount} -gt ${timeout} ]
then
echo "${G_LOG_E} xvfb failed to start."
exit 1
fi
done
}
launch_window_manager() {
local timeout=${XVFB_TIMEOUT:-5}
# Start and wait for either fluxbox to be fully up or we hit the timeout.
fluxbox &
local loopCount=0
until wmctrl -m > /dev/null 2>&1
do
loopCount=$((loopCount+1))
sleep 1
if [ ${loopCount} -gt ${timeout} ]
then
echo "${G_LOG_E} fluxbox failed to start."
exit 1
fi
done
}
run_vnc_server() {
local passwordArgument='-nopw'
if [ -n "${VNC_SERVER_PASSWORD}" ]
then
local passwordFilePath="${HOME}/x11vnc.pass"
if ! x11vnc -storepasswd "${VNC_SERVER_PASSWORD}" "${passwordFilePath}"
then
echo "${G_LOG_E} Failed to store x11vnc password."
exit 1
fi
passwordArgument=-"-rfbauth ${passwordFilePath}"
echo "${G_LOG_I} The VNC server will ask for a password."
else
echo "${G_LOG_W} The VNC server will NOT ask for a password."
fi
x11vnc -display ${DISPLAY} -forever ${passwordArgument} &
wait $!
}
control_c() {
echo ""
exit
}
trap control_c SIGINT SIGTERM SIGHUP
main
exit
The main focus of this baseimage is to run a single application. However, I guess you could install Chrome along with your app and launch it manually when needed. If your app invokes xdg-open to open an URL, you can create a script at /usr/bin/xdg-open
and launch Chrome from there.
Else, you can have a look at https://github.com/fcwu/docker-ubuntu-vnc-desktop for a full desktop.
Thanks, I will look into it
On Wed, 17 Feb 2021 at 19:12, Jocelyn Le Sage notifications@github.com wrote:
The main focus of this baseimage is to run a single application. However, I guess you could install Chrome along with your app and launch it manually when needed. If your app invokes xdg-open to open an URL, you can create a script at /usr/bin/xdg-open and launch Chrome from there.
Else, you can have a look at https://github.com/fcwu/docker-ubuntu-vnc-desktop for a full desktop.
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/jlesage/docker-baseimage-gui/issues/50#issuecomment-780786755, or unsubscribe https://github.com/notifications/unsubscribe-auth/AELM3FH3IYJZAEVASA7KUQDS7QILVANCNFSM4XY4QKDA .
Closing this issue. Please re-open if needed.
Hi
Is there a way to run a full desktop , with this ?
Basically I have an app that calls a web browser for authentication purposes
Any help is appreciated
Thanks