我在docker中都有一个sonarqube和nginx的实例。 Sonarqube在nginx后面,并且工作正常,但是我可以访问它,但是我无法在sonarqube UI中更新任何内容,例如在Marketplace中安装插件。 当我按下安装或更新我的帐户详细信息时,它会显示:
在进行Ajax调用时似乎无法传递cookie和认证令牌。在插件市场上按安装按钮时,它将对以下内容进行POST调用:http://localhost:8089/sonarqube/api/plugins/install
我在Nginx配置中错过了任何东西吗?
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
server {
location /sonarqube {
proxy_pass http://sonarqube:9000;
proxy_read_timeout 90s;
proxy_redirect http://sonarqube:9000 http://localhost:8089;
}
}
}
version: "3.5"
services:
nginx:
build:
context: .
dockerfile: Dockerfile.nginx
ports:
- "8089:8080"
networks:
- sonarnet
sonarqube:
build:
context: .
dockerfile: Dockerfile.sonarqube
expose:
- "9000"
networks:
- sonarnet
environment:
- SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
- sonar.forceAuthentication=true
- sonar.web.context=/sonarqube
########### The following line fixed the problem:###########
- sonar.core.serverBaseUrl = localhost:8089/sonarqube
############################################################
volumes:
- sonarqubeConf:/opt/sonarqube/conf
- sonarqubeLogs:/opt/sonarqube/logs
db:
image: postgres
networks:
- sonarnet
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresqlData:/var/lib/postgresql/data
networks:
sonarnet:
driver: bridge
......
花了一整天后,我找到了解决方案。由于声纳位于反向代理之后并且可以通过localhost:8089 / sonarqube访问,因此我们还需要指定sonar.core.serverBaseUrl。因此,添加以下env变量即可解决问题:-sonar.core.serverBaseUrl = localhost:8089 / sonarqube