diff --git a/resources/docker-images/base/Dockerfile b/resources/docker-images/base/Dockerfile index de5a82fcf0..835806d63c 100644 --- a/resources/docker-images/base/Dockerfile +++ b/resources/docker-images/base/Dockerfile @@ -37,6 +37,15 @@ RUN echo "build ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers RUN < /usr/bin/bashwrapper #!/bin/bash +set -eu +if [[ "${DOCKER_RUN_AS_ROOT:-}" == "1" ]] && [[ "$(id -u)" != "0" ]] ; then + # On Windows run as root so that the permissions are correct + # (root in Docker container is mapped to current user on Windows, + # whereas when Docker is run on Linux root is mapped to root) + sudo -u root -i "$0" "$@" + exit $? +fi + export KEYMAN_USE_NVM=1 export DOCKER_RUNNING=true EOF diff --git a/resources/docker-images/docker-build.inc.sh b/resources/docker-images/docker-build.inc.sh index 13164196e3..e553273652 100644 --- a/resources/docker-images/docker-build.inc.sh +++ b/resources/docker-images/docker-build.inc.sh @@ -81,3 +81,11 @@ docker_wrapper() { docker "$@" fi } + +setup_docker() { + if [[ "${MSYSTEM:-}" == "MINGW64" ]]; then + DOCKER_RUN_ARGS="--env DOCKER_RUN_AS_ROOT=1" + else + DOCKER_RUN_ARGS= + fi +} diff --git a/resources/docker-images/run.sh b/resources/docker-images/run.sh index 857bb90dcf..06541f7614 100755 --- a/resources/docker-images/run.sh +++ b/resources/docker-images/run.sh @@ -27,6 +27,7 @@ builder_parse "$@" check_for_default_values convert_parameters_to_args +setup_docker if is_default_values; then image_version=default @@ -37,21 +38,21 @@ else fi run_android() { - docker_wrapper run -it --rm -v "${KEYMAN_ROOT}":/home/build/build \ + docker_wrapper run ${DOCKER_RUN_ARGS} -it --rm -v "${KEYMAN_ROOT}":/home/build/build \ -v "${KEYMAN_ROOT}/core/build/docker-core/${build_dir}":/home/build/build/core/build \ "keymanapp/keyman-android-ci:${image_version}" \ "${builder_extra_params[@]}" } run_core() { - docker_wrapper run -it --rm -v "${KEYMAN_ROOT}":/home/build/build \ + docker_wrapper run ${DOCKER_RUN_ARGS} -it --rm -v "${KEYMAN_ROOT}":/home/build/build \ -v "${KEYMAN_ROOT}/core/build/docker-core/${build_dir}":/home/build/build/core/build \ "keymanapp/keyman-core-ci:${image_version}" \ "${builder_extra_params[@]}" } run_developer() { - docker_wrapper run -it --rm -v "${KEYMAN_ROOT}":/home/build/build \ + docker_wrapper run ${DOCKER_RUN_ARGS} -it --rm -v "${KEYMAN_ROOT}":/home/build/build \ -v "${KEYMAN_ROOT}/core/build/docker-core/${build_dir}":/home/build/build/core/build \ "keymanapp/keyman-developer-ci:${image_version}" \ "${builder_extra_params[@]}" @@ -60,7 +61,7 @@ run_developer() { run_linux() { mkdir -p "${KEYMAN_ROOT}/linux/build/docker-linux/${build_dir}" mkdir -p "${KEYMAN_ROOT}/linux/keyman-system-service/build/docker-linux/${build_dir}" - docker_wrapper run -it --privileged --rm -v "${KEYMAN_ROOT}":/home/build/build \ + docker_wrapper run ${DOCKER_RUN_ARGS} -it --privileged --rm -v "${KEYMAN_ROOT}":/home/build/build \ -v "${KEYMAN_ROOT}/core/build/docker-core/${build_dir}":/home/build/build/core/build \ -v "${KEYMAN_ROOT}/linux/build/docker-linux/${build_dir}":/home/build/build/linux/build \ -v "${KEYMAN_ROOT}/linux/keyman-system-service/build/docker-linux/${build_dir}":/home/build/build/linux/keyman-system-service/build \ @@ -70,7 +71,7 @@ run_linux() { } run_web() { - docker_wrapper run -it --privileged --rm -v "${KEYMAN_ROOT}":/home/build/build \ + docker_wrapper run ${DOCKER_RUN_ARGS} -it --privileged --rm -v "${KEYMAN_ROOT}":/home/build/build \ -v "${KEYMAN_ROOT}/core/build/docker-core/${build_dir}":/home/build/build/core/build \ "keymanapp/keyman-web-ci:${image_version}" \ "${builder_extra_params[@]}"