How does one get tomcat to bind to ipv4 address?

Solution 1:

Many suggested updating catalina.sh startup script. Yes, that solution would work, but catalina.sh script is not meant to be customized/updated. All changes should go into the customization script instead, i.e. setenv.sh.

NOTE: TOMCAT_HOME/bin/setenv.sh doesn't exist by default, you need to create it. Check the catalina.sh script and you will see the startup script checks if setenv.sh exists, and executes if it does.

So, I suggest you create new TOMCAT_HOME/bin/setenv.sh script with a single line:

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "

Solution 2:

Ok I finally solved it. I was directed to try this and Henk's solution. Neither of which seemed to work with the remote virtual server. I'm guessing the fact that because I'm on a shared kernel space so the provider prevents this. In any case I added: JAVA_OPTS= $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses to the catalina.sh startup script and that seemed to have fixed the issue of binding tomcat to ipv6.

Solution 3:

The correct syntax for modifying catalina.sh would be:

JAVA_OPTS=" $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true "

Solution 4:

If you used this installer: "Apache Solr for TYPO3", you can change the address in the file server.xml. The default points to localhost, so look for 127.0.0.1 and change it into the IPv4-address you want. Don't forget to restart Tomcat6 for the changes to take effect.

UPDATE, 20120521

See my comment below on how to disable IPv6 on Ubuntu 11.10.

I have successfully tested this on a Virtualbox-VM on my Mac. The address for the connector port 8080 has been changed from 127.0.0.1 to 0.0.0.0 in server.xml.

Then disabling IPv6 makes the "tcp6" to go away, so it's binded to an IPv4-only address.

Before / with IPv6 enabled:

# netstat -anp | grep 8080   
tcp6       0      0 :::8080                 :::*                    LISTEN      1972/java

After / IPv6 disabled:

# netstat -anp | grep 8080   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2045/java