У меня есть следующий файл doar-compose sonarqube + postgres. Он отлично работает на моих локальных машинах на Docker for Windows
и Docker for Mac
.
Но когда я развертываю его на нашем работающем сервере (Ubuntu 18.04), sonarqube не может получить доступ к postgres, и я получаю следующую ошибку в журналах контейнеров sonarqube:
Есть идеи, почему это происходит на живом сервере?
Это версии Docker и Docker-Compose:
Локальный компьютер
Docker версия 18.09.2, сборка 6247962
Docker-compose версия 1.23.2, сборка 1110ad01
Сервер
Docker версия 18.09.6, сборка 481bc77
Docker-compose версия 1.24.0, сборка 0aa5906
version: "3.5"
services:
sonarqube:
image: sonarqube:7.7-community
ports:
- "9000:9000"
depends_on:
- db
networks:
- sonarnet
environment:
- SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
- sonar.forceAuthentication=true
volumes:
- sonarqubeConf:/opt/sonarqube/conf
- sonarqubeData:/opt/sonarqube/data
- sonarqubeBundledPlugins:/opt/sonarqube/lib/bundled-plugins
- 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
volumes:
sonarqubeConf:
name: sonarqubeConf
driver: local
sonarqubeData:
name: sonarqubeData
driver: local
sonarqubeBundledPlugins:
name: sonarqubeBundled
driver: local
sonarqubeLogs:
name: sonarqubeLogs
driver: local
postgresql:
name: postgresql
driver: local
postgresqlData:
name: postgresqlData
driver: local
В логах контейнера sonarqube появляется следующая ошибка:
SonarQube Server / 7.7.0.23042 / 1dcac8b8de36b377a1810cc8f1c4c31744e12729
sonarqube_1 | 2019.06.13 09:16:13 INFO web[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://db:5432/sonar
sonarqube_1 | 2019.06.13 09:16:23 ERROR web[][o.s.s.p.Platform] Web server startup failed
sonarqube_1 | java.lang.IllegalStateException: Can not connect to database. Please check connectivity and settings (see the properties prefixed by 'sonar.jdbc.').
Журналы контейнеров postgres
db_1 | 2019-06-13 11:18:36.548 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
db_1 | 2019-06-13 11:18:36.548 UTC [1] LOG: listening on IPv6 address "::", port 5432
db_1 | 2019-06-13 11:18:36.561 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1 | 2019-06-13 11:18:36.579 UTC [24] LOG: database system was shut down at 2019-06-13 11:18:35 UTC
db_1 | 2019-06-13 11:18:36.585 UTC [1] LOG: database system is ready to accept connections
Дополнительные обновления
Я добавил еще один сервис (jenkins) в файл compose, и он запущен, но я не могу получить доступ к сервису db из сервиса jenkins! например ping db
не работает !!
Когда я получаю состояние сети их мостовой сети, я вижу, что оба postgres и jenkins добавляются, но я даже не могу ping db
обслуживать по его IP-адресу (ping 172.22.0.3) изнутри службы jenkins!
Я подозреваю, что это связано с сетью между сервисами создания докеров.
Есть идеи, почему это происходит?
[
{
"Name": "pipeline_sonarnet",
"Id": "754f1d4c5240fc34f0b34faffad61513b95c7c44f89fe15bd66efb7b79c4f53f",
"Created": "2019-06-13T22:33:58.907722824+01:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.22.0.0/16",
"Gateway": "172.22.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"10e84761051c6e6044be3d976ee51dfd70c41c89dc38aab2d3ebcbeb9c2d6129": {
"Name": "pipeline_db_1",
"EndpointID": "d8e3b21ffa536c7c437479b5dbaf9a5946177ef87f73cf8e024610ebc8d3c1db",
"MacAddress": "02:42:ac:16:00:03",
"IPv4Address": "172.22.0.3/16",
"IPv6Address": ""
},
"c1d042c77b3a0a6f519e11a5a812e38b95ac229244a5d6f28669c4132a104f30": {
"Name": "pipeline_jenkins_1",
"EndpointID": "e7592e5de8001ebf4df854c83670552bda78dad51191e215885fd7d58339d98b",
"MacAddress": "02:42:ac:16:00:02",
"IPv4Address": "172.22.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "sonarnet",
"com.docker.compose.project": "pipeline",
"com.docker.compose.version": "1.24.0"
}
}
]
Интересно! У других людей тоже есть такая же проблема, но нет ответа:
https://forums.docker.com/t/docker-compose-works-on-my-machine-but-not-production/31410