使用绑定安装卷在docker-compose上运行Sonarqube

时间:2018-11-28 01:54:30

标签: sonarqube docker-compose

我正在尝试使用docker-compose在Centos 7服务器上的Docker容器中运行Sonarqube。使用此docker-compose.yml文件中配置的命名卷,一切都会按预期进行:

version: "3"

services:
  sonarqube:
    image: sonarqube
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      - sonar.jdbc.url=jdbc:postgresql://db:5432/sonar
    volumes:
      - sonarqube_conf:/opt/sonarqube/conf
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_bundled_plugins:/opt/sonarqube/lib/bundled-plugins

  db:
    image: postgres
    networks:
      - sonarnet
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data

networks:
  sonarnet:
    driver: bridge

volumes:
  sonarqube_conf:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_bundled_plugins:
  postgresql:
  postgresql_data:

但是,我的 / var / lib / docker / volumes 目录的大小不足以容纳命名卷。因此,我将docker-compose.yml文件更改为使用绑定安装卷,如下所示。

version: "3"

services:
  sonarqube:
    image: sonarqube
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      - sonar.jdbc.url=jdbc:postgresql://db:5432/sonar
    volumes:
      - /data/sonarqube/conf:/opt/sonarqube/conf
      - /data/sonarqube/data:/opt/sonarqube/data
      - /data/sonarqube/extensions:/opt/sonarqube/extensions
      - /data/sonarqube/bundled_plugins:/opt/sonarqube/lib/bundled-plugins

  db:
    image: postgres
    networks:
      - sonarnet
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
    volumes:
      - /data/postgresql:/var/lib/postgresql
      - /data/postgresql_data:/var/lib/postgresql/data

networks:
  sonarnet:
    driver: bridge

但是,在运行 docker-compose up -d 之后,该应用程序启动,但是没有写入任何绑定装载卷。结果,未加载Sonarqube插件,并且未初始化声纳postgreSQL数据库。我以为这可能是selinux的问题,但是我暂时禁用了它,但没有成功。我不确定接下来要看什么。

3 个答案:

答案 0 :(得分:0)

我认为我从"How to persist configuration & analytics across container invocations in Sonarqube docker image"中得到的答案也会对您有所帮助。

为了很好,我也将其粘贴在这里:


.....

docker-sonarqube映像的Dockerfile中注意此行SONARQUBE_HOME。我们可以控制这个环境变量。

使用docker run时。只需:

txt docker run -d \ ... ... -e SONARQUBE_HOME=/sonarqube-data -v /PERSISTENT_DISK/sonarqubeVolume:/sonarqube-data

这将使Sonarqube创建conf,data等文件夹并将数据存储在其中。根据需要。


或使用Kubernetes。在您的部署YAML文件中。做:

txt ... ... env: - name: SONARQUBE_HOME value: /sonarqube-data ... ... volumeMounts: - name: app-volume mountPath: /sonarqube-data

并且name属性中的volumeMounts指向Kubernetes部署YAML文件的volumes部分中的卷。 这又使Sonarqube使用/sonarqube-data mountPath来创建扩展,conf等文件夹,然后将数据保存在其中。

然后瞧瞧,您的Sonarqube数据将永久保存。

我希望这会对其他人有所帮助。

请注意,YAML和Docker运行示例并不详尽。他们专注于持久性Sonarqube数据的问题。


试用BobC,让我知道。

祝你有美好的一天。

答案 1 :(得分:0)

类似容器正在运行的声音,正如您所提到的,Sonarqube正在启动。当启动时,是否表明它正在使用内存db中的H2?运行docker-compose up -d后,使用docker logs -f <container_name>查看Sonarqube启动时发生的情况。 为了简化使用已知名称查看日志的过程,建议您也将一个容器名称添加到Sonarqube服务中。例如,container_name: sonarqube

此外,虽然我知道计划是不赞成使用环境变量来进行用户名,密码和jdbc连接,但我最好还是在docker-compose中使用环境变量而不是相应的属性值。对于连接字符串,请尝试:SONARQUBE_JDBC_URL: jdbc:postgresql://db/sonar,而不指定postgres的默认端口。

答案 2 :(得分:0)

下面的代码希望可以用一条命令为您提供帮助。

创建一个名为docker-compose.yaml的新的docker-compose文件,

version: "3"
services:
  sonarqube:
    image: sonarqube:8.2-community
    depends_on:
      - db
    ports:
      - "9000:9000"
    networks:
      - sonarqubenet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarqube
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
      - sonarqube_temp:/opt/sonarqube/temp
    restart: on-failure
    container_name: sonarqube
  db:
    image: postgres
    networks:
      - sonarqubenet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data
    restart: on-failure
    container_name: postgresql

networks:
  sonarqubenet:
    driver: bridge

volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  sonarqube_temp:
  postgresql:
  postgresql_data:

然后,执行命令,

$ docker-compose up -d

$ docker container ps