我正在尝试使用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的问题,但是我暂时禁用了它,但没有成功。我不确定接下来要看什么。
答案 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