diff --git a/Dockerfile b/Dockerfile index 96895ba..2914f67 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,12 +18,7 @@ RUN apt-get update && apt-get -y upgrade && \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* -# Using a wildcard causes caching problems on some systems -COPY src/disk.sh /run/ -COPY src/display.sh /run/ -COPY src/entry.sh /run/ -COPY src/install.sh /run/ -COPY src/network.sh /run/ +COPY ./src /run/ RUN chmod +x /run/*.sh VOLUME /storage diff --git a/docker-compose.yml b/docker-compose.yml index 3fa57b3..43e0c37 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,12 +4,11 @@ services: container_name: qemu image: qemux/qemu-docker:latest environment: + DISPLAY: "vnc" CPU_CORES: "1" RAM_SIZE: "512M" DISK_SIZE: "16G" BOOT: "https://dl-cdn.alpinelinux.org/alpine/v3.18/releases/x86_64/alpine-standard-3.18.2-x86_64.iso" - DISPLAY: "vnc" - CONTROL_PORTS: "5900" devices: - /dev/kvm - /dev/vhost-net @@ -18,7 +17,7 @@ services: cap_add: - NET_ADMIN ports: - - 22:22 + - 2222:22 - 5900:5900 restart: on-failure stop_grace_period: 1m diff --git a/readme.md b/readme.md index 6da3ff9..4eba695 100644 --- a/readme.md +++ b/readme.md @@ -28,6 +28,7 @@ services: container_name: qemu image: qemux/qemu-docker:latest environment: + DISPLAY: "vnc" DISK_SIZE: "16G" BOOT: "https://dl-cdn.alpinelinux.org/alpine/v3.18/releases/x86_64/alpine-standard-3.18.2-x86_64.iso" devices: @@ -35,7 +36,8 @@ services: cap_add: - NET_ADMIN ports: - - 22:22 + - 2222:22 + - 5900:5900 restart: on-failure ``` @@ -124,8 +126,19 @@ docker run -it --rm -e "BOOT=http://www.example.com/image.iso" --device=/dev/kvm ``` If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check your BIOS settings. + + * ### How can I connect with VNC? + + To enable VNC, add the following lines to your compose file: + + ```yaml + environment: + DISPLAY: "vnc" + ports: + - 5900:5900 + ``` - * ### How do I provide extra arguments to QEMU? + * ### How do I provide custom arguments to QEMU? You can create the `ARGUMENTS` environment variable to provide additional arguments to QEMU at runtime: @@ -187,17 +200,6 @@ docker run -it --rm -e "BOOT=http://www.example.com/image.iso" --device=/dev/kvm Please note that even if you don't need DHCP, it's still recommended to enable this feature as it prevents NAT issues and increases performance by using a `macvtap` interface. - * ### How can I connect with VNC? - - To enable VNC, add the following lines to your compose file: - - ```yaml - ports: - "5900:5900" - environment: - DISPLAY: "vnc" - ``` - [build_url]: https://github.com/qemu-tools/qemu-docker/ [hub_url]: https://hub.docker.com/r/qemux/qemu-docker/ [tag_url]: https://hub.docker.com/r/qemux/qemu-docker/tags diff --git a/src/display.sh b/src/display.sh index 3e6f758..237b184 100644 --- a/src/display.sh +++ b/src/display.sh @@ -5,7 +5,7 @@ set -Eeuo pipefail : ${DISPLAY:='none'} # Display type -case "$DISPLAY" in +case "${DISPLAY,,}" in vnc) DISPLAY_OPTS="-nographic -vga std -vnc :0" ;; diff --git a/src/entry.sh b/src/entry.sh index 2ba5d3e..9074d69 100755 --- a/src/entry.sh +++ b/src/entry.sh @@ -33,8 +33,8 @@ cd /run . install.sh # Get bootdisk . disk.sh # Initialize disks -. network.sh # Initialize network . display.sh # Initialize display +. network.sh # Initialize network KVM_ERR="" KVM_OPTS="" @@ -69,7 +69,6 @@ ARGS=$(echo "$ARGS" | sed 's/\t/ /g' | tr -s ' ') trap - ERR info "Booting image using ${VERS}..." - [[ "${DEBUG}" == [Yy1]* ]] && set -x exec qemu-system-x86_64 ${ARGS:+ $ARGS} { set +x; } 2>/dev/null diff --git a/src/network.sh b/src/network.sh index 6ae1cef..30f2fc1 100644 --- a/src/network.sh +++ b/src/network.sh @@ -148,6 +148,10 @@ configureNAT () { ip link set dev "${VM_NET_TAP}" master dockerbridge + if [[ -z "${CONTROL_PORTS}" ]] && [[ "${DISPLAY,,}" == "vnc" ]]; then + CONTROL_PORTS='5900' + fi + CONTROL_PORT_ARGS='' for PORT in $CONTROL_PORTS ; do CONTROL_PORT_ARGS="$CONTROL_PORT_ARGS ! --dport $PORT"