Почему Геррит в Docker не находит JAVA_HOME? - PullRequest
0 голосов
/ 18 июня 2020

Я установил Gerrit в контейнер Docker вместе с зависимостями httpd и postgres. Файл docker -compose.yml выглядит так:

version: '3.1'

services:
  gerrit:
    image: gerritcodereview/gerrit
    environment:
      - CANONICAL_WEB_URL=http://ooi-pmo-prd02.whoi.edu:8080/
    volumes:
      - ./gerrit/etc:/var/gerrit/etc/
      - ./gerrit/git:/var/gerrit/git/
      - ./gerrit/index:/var/gerrit/index/
      - ./gerrit/cache:/var/gerrit/cache/
    ports:
      - "29418:29418"
    links:
      - postgres
    depends_on:
      - postgres

  apache:
    image: httpd
    volumes:
      - ./httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf
      - ./httpd/.htpasswd:/usr/local/apache2/conf/.htpasswd
    ports:
      - "8080:80"

  postgres:
    image: postgres:9.6
    environment:
      - POSTGRES_USER=gerrit2
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=reviewdb
    volumes:
      - ./postgres/:/var/lib/postgresql/data

Apache и Postgres запускаются без проблем, но Java не запускается из-за невозможности найти допустимый JDK или JRE, как будто он не видит переменную среды JAVA_HOME или параметр javaHome в моем файле gerrit.config (ниже):

[gerrit]
        basePath = git
        canonicalWebUrl = http://ooi-pmo-prd02.whoi.edu:8080/
        serverId = 85d6f505-5412-4eef-9f26-e844e9efd258
[database]
        type = postgresql
        hostname = localhost
        database = reviewdb
        username = gerrit2
[index]
        type = LUCENE
[auth]
        type = HTTP
        logoutUrl = http://aa:aa@ooi-pmo-prd02.whoi.edu:8080/logout
        httpHeader =
[sendemail]
        smtpServer = localhost
        smtpUser = gerrit2
[container]
        user = root
        javaHome = /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre
[httpd]
        listenUrl = http://ooi-pmo-prd02.whoi.edu:8080/
[cache]
        directory = cache
[sshd]
        listenAddress = *:29418
[user]
        name = gerrit2
        email = pmena@whoi.edu

При запуске gerrit сразу же выходит из строя с этой ошибкой:

pmena@ooi-pmo-prd02=> docker logs gerrit_gerrit_1
Running Gerrit ...
Cannot find a JRE or JDK. Please ensure that the JAVA_HOME environment
variable or container.javaHome in /var/gerrit/etc/gerrit.config is
set to a valid >=1.8 JRE location

И это несмотря на то, что JAVA_HOME соответствует JRE, указанному выше - и это действительно:

pmena@ooi-pmo-prd02=> echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre
pmena@ooi-pmo-prd02=> ls -l /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre
total 4
drwxr-xr-x. 2 root root  172 Apr  9 14:04 bin
drwxr-xr-x. 9 root root 4096 Apr  9 14:02 lib
pmena@ooi-pmo-prd02=> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/bin/java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

Есть ли какой-то трюк, чтобы заставить Геррита «увидеть» Java, когда он работает в контейнере Docker?

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

docker - составить с изображением: gerritcodereview / gerrit: 3.1.2

I exe c - для gerrit получить java_home

bash-4.2$ ls -hl  /usr/lib/jvm/
total 0
drwxr-xr-x. 3 root root 17 Dec 14  2019 java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64
lrwxrwxrwx. 1 root root 21 Dec 14  2019 jre -> /etc/alternatives/jre
lrwxrwxrwx. 1 root root 27 Dec 14  2019 jre-1.8.0 -> /etc/alternatives/jre_1.8.0
lrwxrwxrwx. 1 root root 35 Dec 14  2019 jre-1.8.0-openjdk -> /etc/alternatives/jre_1.8.0_openjdk
lrwxrwxrwx. 1 root root 51 Dec 14  2019 jre-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64 -> java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre
lrwxrwxrwx. 1 root root 29 Dec 14  2019 jre-openjdk -> /etc/alternatives/jre_openjdk

, чтобы вы могли установить контейнер в gerrit.config

[container]
  user = gerrit
  javaOptions = -Dfile.encoding=UTF-8
  javaHome = "/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre"
0 голосов
/ 18 июня 2020

Набрав docker run --rm -it --entrypoint /bin/cat gerritcodereview/gerrit /var/gerrit/etc/gerrit.config, я смог найти, что ожидал gerrit для своей конфигурации Java, которую я ввел в разделе [container] файла gerrit.config. Чтобы подтвердить, что я использую правильный "javaHome", я сделал в контейнере Gerrit следующее:

pmena@ooi-pmo-prd02=> docker run --rm -it --entrypoint /bin/bash gerritcodereview/gerrit
bash-4.2$ ls -l /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Nov 15  2019 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre/bin/java
bash-4.2$ ls -l /etc/alternatives/jre
lrwxrwxrwx. 1 root root 64 Nov 15  2019 /etc/alternatives/jre -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre
...