使用绑定装载卷与docker compose一起运行Sonarqube

使用绑定装载卷与docker compose一起运行Sonarqube,sonarqube,docker-compose,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

我正在尝试使用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:
但是,my/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插件未加载,sonar postgreSQL数据库未初始化。我认为这可能是selinux的问题,但我暂时禁用了它,但没有成功。我不确定下一步该看什么。

我想我的回答也会对你有所帮助

为了更好的衡量,我还将其粘贴在这里:


请注意,
docker sonaqube
图像的Dockerfile中的这一行。我们可以控制这个环境变量

使用
docker run时
。简单地做:

txt
docker run-d\
...
...
-e SONARQUBE_HOME=/SONARQUBE数据
-v/持久磁盘/sonarqubeVolume:/sonarqube数据

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


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

txt
...
...
环境:
-姓名:SONARQUBE_HOME
值:/QUBE数据
...
...
体积数量:
-名称:应用程序卷
挂载路径:/QUBE数据

volumeMounts
属性中的
name
指向Kubernetes部署YAML文件的
volumes
部分中的卷。 这将再次使Sonarqube使用
/Sonarqube data
mountPath创建扩展名、配置等文件夹,然后将数据保存在其中

瞧,你的Sonarqube数据就这样被持久化了

我希望这能帮助其他人

注意,YAML和Docker运行示例并非详尽无遗。他们关注的是持久化数据的问题


试试BobC,让我知道


祝您度过愉快的一天。

听起来容器正在运行,正如您所提到的,Sonarqube启动了。当它启动时,是否显示它正在使用内存数据库中的H2?运行
docker compose up-d
后,使用
docker logs-f
查看Sonarqube启动时发生的情况。 为了简化使用已知名称查看日志的过程,我建议您也将容器名称添加到Sonarqube服务中。例如,
container\u name:sonarqube


另外,虽然我知道计划是不赞成在用户名、密码和jdbc连接中使用环境变量,但我在docker compose中使用环境变量而不是相应的属性值时运气更好。对于连接字符串,请尝试:
SONARQUBE\ujdbc\uurl:JDBC:postgresql://db/sonar
而不指定postgres的默认端口。

我希望下面的代码可以在一个命令中帮助您

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

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

好的建议如下。然而,我最终在磁盘上创建了一个新的相当大的逻辑卷。然后,我将所有docker命名的卷从/var/lib/docker/volumes目录移动到新逻辑卷上的一个目录。最后,我将指向/var/lib/docker/volumes的sym链接添加到包含所有docker卷的新目录中。我现在有足够的容量来存放我命名的docker卷,我的Sonarqube docker compose文件工作正常。