Не удается запустить сонар-сканер внутри док-контейнера: разрешение отклонено

Я пытаюсь создать собственный образ докера с целями CI (конвейеры битбакета). После сборки и тестирования моего кода я хотел бы провести некоторый анализ с помощью sonarqube.

На моем пользовательском образе я попытался установить сонар-сканер, поэтому в контейнере он просто будет выполняться. Однако внутри контейнера (либо на битбакете, либо на моей локальной машине) происходит сбой с этой ошибкой:

/sonar-scanner-2.8/bin/sonar-scanner: 108: exec: : Permission denied

Я уже пробовал много разных способов установить права доступа и права собственности на каталог сканера, но ничего не сработало.

Что еще более удивительно, даже при запуске контейнера с флэш-памятью --privileged=true я все равно получаю ту же ошибку.

Что мне не хватает в основах докера?

Это моя последняя версия Dockerfile:

# Pull base image.
FROM node:6

LABEL maintainer "Gabriel Araujo <[email protected]>"

ENV SONAR_SCANNER_VERSION 2.8
ENV SONAR_SCANNER_HOME /home/sonar-scanner-${SONAR_SCANNER_VERSION}
ENV SONAR_SCANNER_PACKAGE sonar-scanner-${SONAR_SCANNER_VERSION}.zip
ENV SONAR_RUNNER_HOME ${SONAR_SCANNER_HOME}
ENV PATH $PATH:${SONAR_SCANNER_HOME}/bin
ENV WORKDIR /home/workspace

# Define working directory.
WORKDIR ${WORKDIR}

# Install dependencies
RUN apt-get -yqq update && \
    apt-get -yqq --no-install-recommends install git bzip2 curl unzip && \
    npm install -g gulp bower && \
    npm cache clean && \
    apt-get -yqq autoremove && \
    apt-get -yqq clean && \
    rm -rf /var/lib/apt/lists/* /var/cache/* /tmp/* /var/tmp/*

# Allow root for bower
RUN echo '{ "allow_root": true }' > /root/.bowerrc

# Download sonar
RUN curl --insecure -OL https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/${SONAR_SCANNER_PACKAGE} && \
  unzip ${SONAR_SCANNER_PACKAGE} -d /home && \
  rm ${SONAR_SCANNER_PACKAGE}

RUN addgroup sonar && \
  useradd -s /usr/sbin/nologin -d ${SONAR_SCANNER_HOME} -g sonar sonar && \
  chown -R sonar:sonar ${SONAR_SCANNER_HOME} && \
  chown -R sonar:sonar ${WORKDIR}

USER sonar

person Gabriel Araujo    schedule 25.02.2017    source источник
comment
какая у вас команда запуска докера?   -  person gbolo    schedule 25.02.2017
comment
Я предоставил проверенный и рабочий пример в своем ответе. Если вы нашли это полезным, пожалуйста, проголосуйте и примите мой ответ.   -  person gbolo    schedule 25.02.2017
comment
Я принял твой ответ. Как вы поняли, для этого действительно требовалась Java 8. Однако сообщение об ошибке не помогло указать что-то о разрешениях. В любом случае, спасибо за помощь.   -  person Gabriel Araujo    schedule 03.03.2017


Ответы (1)


Сначала необходимо установить Java 8, поскольку этого требует сонарный сканер. Я добавил его в ваш Dockerfile. Необходимо установить из бэкпортов Джесси.

Возможно, вам следует объединить мои дополнения в существующий раздел Install dependencies

# Pull base image.
FROM node:6

LABEL maintainer "Gabriel Araujo <[email protected]>"

ENV SONAR_SCANNER_VERSION 2.8
ENV SONAR_SCANNER_HOME /home/sonar-scanner-${SONAR_SCANNER_VERSION}
ENV SONAR_SCANNER_PACKAGE sonar-scanner-${SONAR_SCANNER_VERSION}.zip
ENV SONAR_RUNNER_HOME ${SONAR_SCANNER_HOME}
ENV PATH $PATH:${SONAR_SCANNER_HOME}/bin
ENV WORKDIR /home/workspace

# Define working directory.
WORKDIR ${WORKDIR}

# Install OpenJDK 8
RUN echo 'deb http://deb.debian.org/debian jessie-backports main' > /etc/apt/sources.list.d/jessie-backports.list && \
     apt-get update && \
     apt-get install -y -t jessie-backports openjdk-8-jre-headless ca-certificates-java

# Install dependencies
RUN apt-get -yqq update && \
    apt-get -yqq --no-install-recommends install git bzip2 curl unzip && \
    npm install -g gulp bower && \
    npm cache clean && \
    apt-get -yqq autoremove && \
    apt-get -yqq clean && \
    rm -rf /var/lib/apt/lists/* /var/cache/* /tmp/* /var/tmp/*

# Allow root for bower
RUN echo '{ "allow_root": true }' > /root/.bowerrc

# Download sonar
RUN curl --insecure -OL https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/${SONAR_SCANNER_PACKAGE} && \
  unzip ${SONAR_SCANNER_PACKAGE} -d /home && \
  rm ${SONAR_SCANNER_PACKAGE}

RUN addgroup sonar && \
  useradd -s /usr/sbin/nologin -d ${SONAR_SCANNER_HOME} -g sonar sonar && \
  chown -R sonar:sonar ${SONAR_SCANNER_HOME} && \
  chown -R sonar:sonar ${WORKDIR}

USER sonar

Теперь это должно работать:

docker build -t sonar-test .
docker run -it --rm sonar-test /home/sonar-scanner-2.8/bin/sonar-scanner --help
INFO: 
INFO: usage: sonar-scanner [options]
INFO: 
INFO: Options:
INFO:  -D,--define <arg>     Define property
INFO:  -h,--help             Display help information
INFO:  -v,--version          Display version information
INFO:  -X,--debug            Produce execution debug output
INFO:  -i,--interactive      Run interactively
person gbolo    schedule 25.02.2017