使用绑定装载卷与docker compose一起运行Sonarqube
我正在尝试使用Docker compose在Centos 7服务器上的Docker容器中运行Sonarqube。使用此docker-compose.yml文件中配置的命名卷,一切正常工作:使用绑定装载卷与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
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文件工作正常。