# Tomcat startet nicht (java.net.BindException)



## Firestorm87 (28. Apr 2011)

Hallo,.

Ich habe Heute versucht auf meinem Ubuntu ein Tomcat zum laufen zu bekommen.
Leider will er sich nicht starten lassen und Ich kann das Problem nicht verstehen...

Einmal auszug LOG:

```
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Apr 28, 2011 6:17:29 PM org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Apr 28, 2011 6:17:29 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 823 ms
Apr 28, 2011 6:17:29 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Apr 28, 2011 6:17:29 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.12
Apr 28, 2011 6:17:29 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory examples
Apr 28, 2011 6:17:32 PM org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [2,572] milliseconds.
Apr 28, 2011 6:17:32 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory manager
Apr 28, 2011 6:17:32 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory docs
Apr 28, 2011 6:17:32 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory ROOT
Apr 28, 2011 6:17:32 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory host-manager
Apr 28, 2011 6:17:33 PM org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Apr 28, 2011 6:17:33 PM org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Apr 28, 2011 6:17:33 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3461 ms
Apr 28, 2011 6:17:33 PM org.apache.catalina.core.StandardServer await
SEVERE: StandardServer.await: create[localhost:8005]:
java.net.BindException: Cannot assign requested address
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:353)
        at java.net.ServerSocket.bind(ServerSocket.java:336)
        at java.net.ServerSocket.<init>(ServerSocket.java:202)
        at org.apache.catalina.core.StandardServer.await(StandardServer.java:422)
        at org.apache.catalina.startup.Catalina.await(Catalina.java:707)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:653)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:303)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:431)
Apr 28, 2011 6:17:33 PM org.apache.coyote.AbstractProtocolHandler pause
INFO: Pausing ProtocolHandler ["http-bio-8080"]
Apr 28, 2011 6:17:34 PM org.apache.coyote.AbstractProtocolHandler pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
Apr 28, 2011 6:17:35 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Apr 28, 2011 6:17:35 PM org.apache.coyote.AbstractProtocolHandler stop
INFO: Stopping ProtocolHandler ["http-bio-8080"]
Apr 28, 2011 6:17:35 PM org.apache.coyote.AbstractProtocolHandler stop
INFO: Stopping ProtocolHandler ["ajp-bio-8009"]
```
Also er kann den Port 8005 nicht belegen...
Aber ein anderes Programm belegt diesen Port auch nicht:

```
netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      0          1870144293  11176/slapd
tcp        0      0 127.0.0.1:10024         0.0.0.0:*               LISTEN      107        1870144275  11170/amavisd (mast
tcp        0      0 127.0.0.1:10025         0.0.0.0:*               LISTEN      0          1870146948  12195/master
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      103        1870144231  11148/mysqld
tcp        0      0 0.0.0.0:236             0.0.0.0:*               LISTEN      0          1870147127  12258/zarafa-server
tcp        0      0 0.0.0.0:110             0.0.0.0:*               LISTEN      0          1870147081  12207/zarafa-gatewa
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      0          1870147082  12207/zarafa-gatewa
tcp        0      0 127.0.0.1:783           0.0.0.0:*               LISTEN      0          1870144390  11190/spamd.pid
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      0          1870147090  12217/zarafa-ical
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          1870143625  10715/sshd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      0          1870146930  12195/master
tcp6       0      0 :::389                  :::*                    LISTEN      0          1870144294  11176/slapd
tcp6       0      0 :::80                   :::*                    LISTEN      0          1870147210  7469/apache2
tcp6       0      0 :::22                   :::*                    LISTEN      0          1870143627  10715/sshd
tcp6       0      0 :::443                  :::*                    LISTEN      0          1870147215  7469/apache2
```
Es sieht mir also eher nach nem Fehler der Berechtigung oder der Grundsätzlichen Fähigkeit eines Binds von Java aus ?!?

Ich kann mir da leider gar keinen Reim drauf machen...
Ausgeführt habe Ich das ganze bereits als root, so dass es die Berechtigung eigentlich nicht sein sollte!

Gruß und vielen Dank

Firestorm


----------



## Noctarius (28. Apr 2011)

Interessanter Fehler. Ist es der Tomcat aus dem Repo? Welche Ubuntu Version nutzt du und Tomcat 5 oder 6?


----------



## Firestorm87 (28. Apr 2011)

Ich nutze ein Ubuntu 10.04 (wegen dem LTS) und habe den identischen Fehler mit Tomcat 5.5 / 6.0 / 7.0.

Es spielt auch keine Rolle, ob Ich die Repo-Version nehme, oder die tar-Version manuell entpacke und per script starte....
(Einstellungen im Tomcat sind noch alle auf default).

Es scheint also ein genereller Fehler zu sein... die Frage ist, ob es am Tomcat liegt, oder ob gerade gar kein Java-Prog nen Port bekommen würde...
Das müsste Ich vll. mal ausprobieren,.

/EDIT: Habe auch das SUN-JDK schonmal gegen das default-jdk getauscht...
Aber auch damit läufts net...


----------



## maki (28. Apr 2011)

Wqs liefert denn ein [c]ping localhost[/c]?


----------



## Firestorm87 (28. Apr 2011)

Nichts ungewöhnliches:

```
ping localhost
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.042 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.033 ms
```

/EDIT: Ich verstehe worauf du hinaus willst.. (hab ja auch schon bei Google gesucht )

```
ifconfig lo
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:638866797 errors:0 dropped:0 overruns:0 frame:0
          TX packets:638866797 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:233459140457 (233.4 GB)  TX bytes:233459140457 (233.4 GB)
```
Der Adapter is da...


----------



## Noctarius (28. Apr 2011)

Ist es eine saubere Plain-Installation? Wenn nicht, mal in ner VM direkt nach der Basisinstallation probiert? Ich nutze massig 10.04 Mini-Installs und alle ohne Probleme (mit Repo-Tomcat und auch mit Download-Version).

Desktop oder Server?


----------



## Firestorm87 (28. Apr 2011)

Is ne Server-Installation,. und eigentlich würde Ich den ungern platt machen wollen...
Aber Ich kann das ganze Morgen gern mal inner VM testen,. Nur warum sollte das nach nem frischen Ubuntu nicht gehen? Die Frage ist ja einfach warum gehts nun net


----------



## Noctarius (28. Apr 2011)

Ich meinte auch in einer VM. Klar die Frage ist: Wieso geht es jetzt nicht aber um den Fehler einzuschränken muss man ja irgendwo anfangen. Wenn es dann klappt schau ich Morgen mal in den Sources nach und klapper mal ab von wo der Fehler kommt.


----------



## Firestorm87 (28. Apr 2011)

Ich hab das gerade nochmal in ner Ubuntu 10.10 Desktop-Version und in ner Ubuntu 10.04 Server-Version getestet...
In beiden mit der manuellen Version.

Läuft Problemlos bei genau der gleichen Vorgehensweise (Download, Entpacken, startup.sh ausführen)


----------



## maki (28. Apr 2011)

> EDIT: Ich verstehe worauf du hinaus willst.. (hab ja auch schon bei Google gesucht )


Hätte ja was am Netzwerk sein können 

Was passiert wenn du mit telnet versuchst den Port 8005 anzuzapfen?


----------



## Firestorm87 (28. Apr 2011)

Wie zu erwarten: (Der Port ist wirklich frei)

```
telnet localhost 8005
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
```

Was mir so einfällt...
Die Produktiv-Maschine unterscheidet sich von meinen VMs in einer ipv6-Adresse.

Der Server hat an eth0 sowohl ipv4, als auch ipv6. Am Loopback offensichtlich nur ipv4.
Aber das werde Ich frühstens Morgen näher ergründen, ob das ein Grund sein kann. (eigentlich würde es für mich kein sinn machen, aber wer weiß).

Gute Nacht und immer her mit weiteren Ideen


----------



## Noctarius (28. Apr 2011)

Hast du mal versucht in der /etc/hosts auch die local IPv6 Addy auf localhost zu drehen?


----------



## Firestorm87 (29. Apr 2011)

Gerade erledigt... bringt leider auch keine veränderung.

Auch eine explizite IP-Angabe in der server.xml auf 127.0.0.1 ändert nur folgende Zeilen im Log:

```
SEVERE: StandardServer.await: create[localhost:8005]:
java.net.BindException: Cannot assign requested address
```
in

```
SEVERE: StandardServer.await: create[127.0.0.1:8005]:
java.net.BindException: Cannot assign requested address
```
Also auch wieder nichts unerwartetes


----------



## Noctarius (29. Apr 2011)

Du nutzt ja unter anderem den runtergeladenen Tomcat? Hast du den als Root gestartet oder unter einem unprivilegierten Benutzer? Wenn letzteres: Klappt es als Root?


----------



## Firestorm87 (29. Apr 2011)

Ich habe noch keinen eigenen User für den Tomcat angelegt.
So weit bin Ich noch nicht gekommen  Bin ja direkt am ersten Funktionstest gescheitert...

Also: Ja, Ich führe sämtliche Startscripte als Root aus.


----------



## Noctarius (29. Apr 2011)

Ich such gleich mal in der Firma in den Sources ob sich erkennen lässt wie der Fehler produziert werden kann.


----------



## homer65 (29. Apr 2011)

Merkwürdiger Fehler. Ich kenne dieses Problem, wenn man den Tomcat auf Port 80 laufen lassen will.
Da ist es ein Berechtigungsproblem und es hilft in /etc/default/tomcat6 folgendes einzutragen:
AUTHBIND=yes
Kannst es ja mal ausprobieren, keine Ahnung, ob es helfen wird.


----------



## Firestorm87 (29. Apr 2011)

Also da steht ja explizit bei, dass diese Option nur für die Verwendung eines Ports von unter 1024 und dem nicht vorhandensein von Root-Rechten vorhanden ist. (Aber trotzdem gut zu wissen, da Ich immer dachte ohne root-Rechte läuft Tomcat nur auf hohen Ports)

Hier ist aber beides nicht gegeben...
Und es steht dort, dass diese Option nicht bei ipv6 eingesetzt werden kann (was hier aber gegeben ist)

Außerdem kann Ich im Binary-Package gerade keine vergleichbare Funktion finden (Was ist hier das äquivalent zur /etc/default-Datei?)


----------



## homer65 (29. Apr 2011)

Firestorm87 hat gesagt.:


> Außerdem kann Ich im Binary-Package gerade keine vergleichbare Funktion finden (Was ist hier das äquivalent zur /etc/default-Datei?)


Weiss ich leider nicht.

Klar ist wohl, das der BIND nicht klappt. Aber warum nicht? 
Sind denn nicht irgentwo weiter Meldungen, die einen Hinweis geben?
Ohne Meldung ist das nur ein stochern im Nebel.
Was sagt denn tail /var/log/messages unmittelbar nach einem Fehlversuch?


----------



## Firestorm87 (29. Apr 2011)

Die Log-Ausgabe vom Tomcat ist leider alles Sinnige was Ich bisher gefunden habe.
Auch /var/log/messages liefer keine (GAR KEINE!) Ausgabe zu einem Startversuch....
Da ist die letzte Meldung schon paar Stunden her, auch wenn Ich den Tomcat noch 2x versuche zu starten...

/EDIT: Ich habe natürlich auch andere LOGs durchsucht... syslog, kernel und alle Tomcat-Logs...
Ich finde nur den Fehler aus dem Eröffnungspost...


----------



## homer65 (29. Apr 2011)

Tja, dann müssen wir wohl im Nebel stochern.
Habe mal nach der Fehlermeldung gegoogelt.
Wenn ich das richtig verstehe, ist gar nicht der Port das Problem, sondern die IP Adresse.
Wie sieht denn bei dir /etc/hosts aus?
Ist localhost richtig verdrahtet?


----------



## Noctarius (29. Apr 2011)

Muss ja, da die anderen beiden Ports 8009 und 8080 sauber geladen werden.


----------



## Firestorm87 (29. Apr 2011)

Die /etc/hosts Datei sieht meiner Meinung nach genau so aus wie sie auszusehen hat und ping etc auf localhost funktionieren ja auch

```
78.47.xxx.xxx meineDomain.de meineDomain
127.0.0.1 localhost.localdomain localhost

2a01:4f8:7d:xxx::xxxx:xxx:x meineDomain.de meineDomain
::1 localhost.localdomain localhost
```
Wobei Ich die beiden IPv6-Einträge erst Heute Morgen dazu editiert habe um zu testen, ob es an den fehlenden Einträgen lag.
Leider keine Veränderung.

Und warum er die anderen Ports anlegt versteh Ich eben auch nicht.
Zwischen 8005 und 8009 ist doch meiner Meinung nach der einzige Unterschied die Funktion, die durch den Aufruf ausgelöst wird?!? Daher sollte sowohl angesprochene IP als auch die dafür notwendige Berechtigung die selbe sein!


----------



## maki (29. Apr 2011)

Nimm doch mla 'nen anderen port anstatt den 8005


----------



## Firestorm87 (29. Apr 2011)

Soweit war Ich auch schon... tiefer (also auch wirklich unter 1000) und auch höher (ab 11000) hab Ich schon diverse Ports probiert...

Auch ein anpassen der 8009, so wie der 8080 bringt keine Veränderung.

Ich kann mir das eigentlich nur so erklären, dass lt. der XML-Struktur die 8005 ja der eigentliche Server ist und 8080, so wie 8009 ein Connector innerhalb des Servers ist.

Sollte nun also nicht die initialisierung dieses Connectors fehlschlagen, sondern irgendwas anderes im Startprozess, so brincht nur der Bind des 8005.

Aber das ist natürlich mehr als nur geraten und sollte afaik auch nicht zu einer Java-Exception führen.
Würde aber erklären warum die 2 Ports funktioneren, nur die 8005 bricht...


----------



## homer65 (29. Apr 2011)

Hmh, da hast du ja localhost zweimal drin. Welchen nimmt er denn nun?
Du betreibst deinen Rechner mit IPv6!?
Also wäre es einen Versuch wert den Eintrag:
127.0.0.1 localhost.localdomain localhost
mal rauszunehmen. Oder falls das nicht stimmt eben 
::1 localhost.localdomain localhost
zu entfernen.


----------



## Firestorm87 (29. Apr 2011)

Ich betreibe den Server sowohl mit ipv6 als auch mit ipv4

Wie bereits geschrieben war der v6-Einträg zum eigentlichen Fehlerzeitpunkt gar nicht vorhanden.
Einen versuch nur den v6-Einträg drinnen zu lassen wird gestartet


----------



## homer65 (29. Apr 2011)

Wie schon gesagt, ist das reines Stochern im Nebel.
Auf jeden Fall hast du an der /etc/hosts geändert. 
Es wäre auch mal einen Versuch Wert sich irgentwo her die Original /etc/hosts zu beschaffen und es mit der auszuprobieren.
Du schriebst ja, das du weitere Ubuntu 10.04 Installationen hast, bei denen es funktioniert.


----------



## Noctarius (29. Apr 2011)

Der 8005 ist der Management Port. Über diesen lässt sich der Tomcat zum runterfahren schubsen


----------



## Noctarius (29. Apr 2011)

Hast Du eventuell einen Hostnamen an den Port gebunden? 
Nir Levy - Eureka: Tomcat java.net.BindException: Cannot assign requested address

Alternativ eventuell das Loopback-Interface Schrott? Scheinbar wird der Shutdown-Port explizit an 127.0.0.1 gebunden:
Old Nabble - Tomcat - User - create[8005]: java.net.BindException: error occured while starting tomcat on Ubuntu Plateform


----------



## Firestorm87 (29. Apr 2011)

Noctarius hat gesagt.:


> Hast Du eventuell einen Hostnamen an den Port gebunden?
> Nir Levy - Eureka: Tomcat java.net.BindException: Cannot assign requested address


Nein,. ist alles original und da ist kein Hostname vorgegeben


Noctarius hat gesagt.:


> Alternativ eventuell das Loopback-Interface Schrott? Scheinbar wird der Shutdown-Port explizit an 127.0.0.1 gebunden:
> Old Nabble - Tomcat - User - create[8005]: java.net.BindException: error occured while starting tomcat on Ubuntu Plateform


Das Interface macht mir eigentlich ein guten Eindruck,. jedoch ist keine Route für das 127.0.0.0 Netz vorhanden. Wobei Ich mir auch gerade nicht sicher bin, ob das sonst der Fall ist (werd das Zuhaus mal an anderen VMs gegen checken...


----------

