2016-12-05 2 views
0

Ces derniers jours, mon conteneur Docker (SonarQube) se bloque quelques secondes après avoir été démarré. Il semble qu'il ne peut plus se connecter au conteneur de la base de données. Comment puis-je les reconnecter ensemble?Le conteneur Docker se bloque au démarrage: java.net.NoRouteToHostException: Aucune route vers l'hôte

conteneur MySQL commande run:

docker run -d --name mysql-sonarqube-container \ 
-e MYSQL_ROOT_PASSWORD=root \ 
-p 3307:3306 \ 
-v /etc/mysql:/etc/mysql/conf.d \ 
mysql:latest 

création d'utilisateur MySQL:

use sonar; 
CREATE USER 'sonar'@'DOCKER_BRIDGE_IP_ADDRESS' IDENTIFIED BY 'sonar'; 
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'DOCKER_BRIDGE_IP_ADDRESS' WITH GRANT OPTION; 

conteneur sonarqube commande run:

docker run -d --name sonarqube-container \ 
--link mysql-sonarqube-container:mysql \ 
-p 9000:9000 -p 9092:9092 \ 
-e SONARQUBE_JDBC_USERNAME=sonar \ 
-e SONARQUBE_JDBC_PASSWORD=sonar \ 
-e SONARQUBE_JDBC_URL="jdbc:mysql://SERVER_IP_ADDRESS:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true" \ 
-e SONARQUBE_HOST_URL="http://DOCKER_BRIDGE_IP_ADDRESS:9000" \ 
sonarqube:latest 

Et voici les journaux Docker:

15:31:25.022 [main] WARN org.sonar.application.JdbcSettings - JDBC URL is recommended to have the property 'useConfigs=maxPerformance' 
2016.12.05 15:31:25 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp 
2016.12.05 15:31:25 INFO app[][o.s.p.m.JavaProcessLauncher] Launch process[es]: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Djava.awt.headless=true -Xmx1G -Xms256m -Xss256k -Djna.nosys=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -Djava.io.tmpdir=/opt/sonarqube/temp -javaagent:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/management-agent.jar -cp ./lib/common/*:./lib/search/* org.sonar.search.SearchServer /opt/sonarqube/temp/sq-process7139915507080636494properties 
2016.12.05 15:31:25 INFO es[][o.s.p.ProcessEntryPoint] Starting es 
2016.12.05 15:31:25 INFO es[][o.s.s.EsSettings] Elasticsearch listening on /127.0.0.1:9001 
2016.12.05 15:31:25 INFO es[][o.elasticsearch.node] [sonarqube] version[2.3.3], pid[21], build[218bdf1/2016-05-17T15:40:04Z] 
2016.12.05 15:31:25 INFO es[][o.elasticsearch.node] [sonarqube] initializing ... 
2016.12.05 15:31:25 INFO es[][o.e.plugins] [sonarqube] modules [], plugins [], sites [] 
2016.12.05 15:31:25 INFO es[][o.elasticsearch.env] [sonarqube] using [1] data paths, mounts [[/opt/sonarqube/data (/dev/mapper/centos_rns170lv-root)]], net usable_space [22.4gb], net total_space [33.8gb], spins? [possibly], types [xfs] 
2016.12.05 15:31:25 INFO es[][o.elasticsearch.env] [sonarqube] heap size [990.7mb], compressed ordinary object pointers [true] 
2016.12.05 15:31:27 INFO es[][o.elasticsearch.node] [sonarqube] initialized 
2016.12.05 15:31:27 INFO es[][o.elasticsearch.node] [sonarqube] starting ... 
2016.12.05 15:31:27 INFO es[][o.e.transport] [sonarqube] publish_address {127.0.0.1:9001}, bound_addresses {127.0.0.1:9001} 
2016.12.05 15:31:27 INFO es[][o.e.discovery] [sonarqube] sonarqube/IxxWMoHCRhevseLUIhO9tw 
2016.12.05 15:31:30 INFO es[][o.e.cluster.service] [sonarqube] new_master {sonarqube}{IxxWMoHCRhevseLUIhO9tw}{127.0.0.1}{127.0.0.1:9001}{rack_id=sonarqube, master=true}, reason: zen-disco-join(elected_as_master, [0] joins received) 
2016.12.05 15:31:30 INFO es[][o.elasticsearch.node] [sonarqube] started 
2016.12.05 15:31:30 INFO es[][o.e.gateway] [sonarqube] recovered [0] indices into cluster_state 
2016.12.05 15:31:30 INFO app[][o.s.p.m.Monitor] Process[es] is up 
2016.12.05 15:31:30 INFO app[][o.s.p.m.JavaProcessLauncher] Launch process[web]: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.management.enabled=false -Djruby.compile.invokedynamic=false -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Djava.security.egd=file:/dev/./urandom -Djava.io.tmpdir=/opt/sonarqube/temp -javaagent:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/management-agent.jar -cp ./lib/common/*:./lib/server/*:/opt/sonarqube/lib/jdbc/mysql/mysql-connector-java-5.1.39.jar org.sonar.server.app.WebServer /opt/sonarqube/temp/sq-process614082345862607988properties 
2016.12.05 15:31:31 INFO web[][o.s.p.ProcessEntryPoint] Starting web 
2016.12.05 15:31:31 INFO web[][o.s.s.a.TomcatContexts] Webapp directory: /opt/sonarqube/web 
2016.12.05 15:31:31 INFO web[][o.a.c.h.Http11NioProtocol] Initializing ProtocolHandler ["http-nio-0.0.0.0-9000"] 
2016.12.05 15:31:31 INFO web[][o.a.t.u.n.NioSelectorPool] Using a shared selector for servlet write/read 
2016.12.05 15:31:31 INFO web[][o.e.plugins] [Obituary] modules [], plugins [], sites [] 
2016.12.05 15:31:32 INFO web[][o.s.s.e.EsClientProvider] Connected to local Elasticsearch: [127.0.0.1:9001] 
2016.12.05 15:31:32 INFO web[][o.s.s.p.LogServerVersion] SonarQube Server/6.1/dc148a71a1c184ccad588b66251980c994879dff 
2016.12.05 15:31:32 INFO web[][o.sonar.db.Database] Create JDBC data source for jdbc:mysql://SERVER_IP_ADDRESS:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true 
2016.12.05 15:31:33 ERROR web[][o.a.c.c.C.[.[.[/]] Exception sending context initialized event to listener instance of class org.sonar.server.platform.web.PlatformServletContextListener 
java.lang.IllegalStateException: Can not connect to database. Please check connectivity and settings (see the properties prefixed by 'sonar.jdbc.'). 
     at org.sonar.db.DefaultDatabase.checkConnection(DefaultDatabase.java:104) ~[sonar-db-6.1.jar:na] 
     ... 
     at java.lang.Thread.run(Thread.java:745) [na:1.8.0_102] 
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure 
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.) 
     at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549) ~[commons-dbcp-1.4.jar:1.4] 
     ... 
     at org.sonar.db.DefaultDatabase.checkConnection(DefaultDatabase.java:102) ~[sonar-db-6.1.jar:na] 
     ... 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_102] 
     ... 
     at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) ~[commons-dbcp-1.4.jar:1.4] 
     ... 
Caused by: java.net.NoRouteToHostException: No route to host 
     at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_102] 
     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_102] 
     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_102] 
     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_102] 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_102] 
     at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_102] 
     at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211) ~[mysql-connector-java-5.1.39.jar:5.1.39] 
     at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300) ~[mysql-connector-java-5.1.39.jar:5.1.39] 
     ... 
2016.12.05 15:31:33 ERROR web[][o.a.c.c.StandardContext] One or more listeners failed to start. Full details will be found in the appropriate container log file 
2016.12.05 15:31:33 ERROR web[][o.a.c.c.StandardContext] Context [] startup failed due to previous errors 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][[timer]]] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
java.lang.Thread.sleep(Native Method) 
org.elasticsearch.threadpool.ThreadPool$EstimatedTimeThread.run(ThreadPool.java:719) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][scheduler][T#1]] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.misc.Unsafe.park(Native Method) 
java.lang.Thread.run(Thread.java:745) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][transport_client_worker][T#1]{New I/O worker #1}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][transport_client_worker][T#2]{New I/O worker #2}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][transport_client_worker][T#3]{New I/O worker #3}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][transport_client_worker][T#4]{New I/O worker #4}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][transport_client_worker][T#5]{New I/O worker #5}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][transport_client_worker][T#6]{New I/O worker #6}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][transport_client_worker][T#7]{New I/O worker #7}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][transport_client_worker][T#8]{New I/O worker #8}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][transport_client_boss][T#1]{New I/O boss #9}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.nio.ch.EPollArrayWrapper.epollWait(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][transport_client_timer][T#1]{Hashed wheel timer #1}] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
java.lang.Thread.sleep(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[Obituary][generic][T#1]] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
sun.misc.Unsafe.park(Native Method) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
java.lang.Object.wait(Native Method) 
com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43) 
2016.12.05 15:31:33 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: 
java.lang.Object.wait(Native Method) 
2016.12.05 15:31:33 INFO web[][o.a.c.h.Http11NioProtocol] Starting ProtocolHandler ["http-nio-0.0.0.0-9000"] 
2016.12.05 15:31:33 INFO web[][o.s.s.a.TomcatAccessLog] Web server is started 
2016.12.05 15:31:33 INFO web[][o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000 
2016.12.05 15:31:33 WARN web[][o.s.p.ProcessEntryPoint] Fail to start web 
java.lang.IllegalStateException: Webapp did not start 
     at org.sonar.server.app.EmbeddedTomcat.isUp(EmbeddedTomcat.java:84) ~[sonar-server-6.1.jar:na] 
2016.12.05 15:31:33 INFO web[][o.a.c.h.Http11NioProtocol] Pausing ProtocolHandler ["http-nio-0.0.0.0-9000"] 
2016.12.05 15:31:34 INFO web[][o.a.c.h.Http11NioProtocol] Stopping ProtocolHandler ["http-nio-0.0.0.0-9000"] 
2016.12.05 15:31:34 INFO web[][o.a.c.h.Http11NioProtocol] Destroying ProtocolHandler ["http-nio-0.0.0.0-9000"] 
2016.12.05 15:31:34 INFO web[][o.s.s.a.TomcatAccessLog] Web server is stopped 
2016.12.05 15:31:35 INFO app[][o.s.p.m.Monitor] Process[es] is stopping 
2016.12.05 15:31:35 INFO es[][o.s.p.StopWatcher] Stopping process 
2016.12.05 15:31:35 INFO es[][o.elasticsearch.node] [sonarqube] stopping 
2016.12.05 15:31:35 INFO es[][o.elasticsearch.node] [sonarqube] stopped 
2016.12.05 15:31:35 INFO es[][o.elasticsearch.node] [sonarqube] closing 
2016.12.05 15:31:35 INFO es[][o.elasticsearch.node] [sonarqube] closed 
2016.12.05 15:31:36 INFO app[][o.s.p.m.Monitor] Process[es] is stopped 

Même si je crée des conteneurs entiers à partir de zéro, le conteneur SonarQube se bloque.

Une de mes hypothèses est que mes SERVER_IP_ADDRESS et mes BRIDGE_IP_ADDRESSES ne sont pas contournés par proxy, mais je n'ai pas réussi en modifiant la variable d'environnement $ no_proxy.

Répondre

0

J'ai finalement utilisé une base de données PostgreSQL au lieu d'une base de données MySQL et cela a fonctionné.

J'ai utilisé docker-compose avec un fichier yml qui décrit les deux services dans le même réseau: la base de données et Sonarqube.


Pour d'autres conteneurs qui rencontrent le problème « Pas de route pour accueillir », je devais utiliser le DOCKER_BRIDGE_IP_ADDRESS dans les paramètres de l'application au lieu de la adresse_serveur_IP (qui n'a pas été reconnu à l'intérieur des conteneurs).

0

Pour la propriété d'environnement SONARQUBE_JDBC_URL, au lieu de SERVER_IP_ADDRESS, utilisez le nom d'alias du conteneur lié (dans votre cas, il s'agit de mysql). Ainsi, votre commande serait

docker run -d --name sonarqube-container \ 
--link mysql-sonarqube-container:mysql \ 
-p 9000:9000 -p 9092:9092 \ 
-e SONARQUBE_JDBC_USERNAME=sonar \ 
-e SONARQUBE_JDBC_PASSWORD=sonar \ 
-e SONARQUBE_JDBC_URL="jdbc:mysql://mysql:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true" \ 
-e SONARQUBE_HOST_URL="http://DOCKER_BRIDGE_IP_ADDRESS:9000" \ 
sonarqube:latest 
+0

Comment l'utilisation d'un alias pour mon SERVER_IP_ADDRESS empêcherait mon conteneur de se bloquer? Cependant, j'ai essayé d'utiliser l'alias de conteneur lié au lieu de SERVER_IP_ADDRESS, mais j'ai obtenu une "java.net.ConnectException: Connection refused". – RotS

+0

Je pensais qu'il n'était pas en mesure de contacter le conteneur de la base de données "Causé par: java.net.NoRouteToHostException: Aucune route vers l'hôte". "Connexion refusée" implique qu'il est en mesure de contacter le conteneur de la base de données mais que le conteneur le refuse, peut-être en raison d'un problème de port. – Yuva