我正在尝试使用 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 文件以使用绑定(bind)安装卷,如下所示。
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后,应用程序启动,但没有写入任何绑定(bind)安装卷。因此,Sonarqube 插件未加载,sonar postgreSQL 数据库未初始化。我以为可能是selinux的问题,但是我暂时禁用了它,没有成功。我不确定接下来要看什么。
最佳答案
我认为我的回答来自"How to persist configuration & analytics across container invocations in Sonarqube docker image"也会对你有帮助。
为了更好地衡量,我也将其粘贴在这里:
......
注意这一行SONARQUBE_HOME在 docker-sonarqube 镜像的 Dockerfile 中。我们可以控制这个环境变量。
使用docker run
时。只需执行以下操作:
txt
docker 运行 -d\
...
...
-e SONARQUBE_HOME=/sonarqube-data
-v/PERSISTENT_DISK/sonarqubeVolume:/sonarqube-data
这将使 Sonarqube 创建 conf、data 等文件夹并在其中存储数据。根据需要。
或者使用 Kubernetes
。在您的部署 YAML 文件中。做:
txt
...
...
环境:
- 名称:SONARQUBE_HOME
值:/sonarqube-data
...
...
体积安装:
- 名称:应用程序音量
挂载路径:/sonarqube-data
volumeMounts
属性中的 name
指向 Kubernetes 部署 YAML 文件的 volumes
部分中的卷。
这将再次使 Sonarqube 使用 /sonarqube-data
mountPath 来创建扩展、conf 等文件夹,然后在其中保存数据。
瞧,您的 Sonarqube 数据就这样被持久化了。
我希望这对其他人有帮助。
注意请注意,YAML 和 Docker 运行示例并不详尽。他们关注的是 Sonarqube 数据持久化的问题。
尝试一下 BobC 并告诉我。
祝你有美好的一天。
关于sonarqube - 使用绑定(bind)安装卷通过 docker-compose 运行 Sonarqube,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53510942/