docker-library/tomcat

Problem setting locale

claudiofus opened this issue · 6 comments

I think there's a problem passing values in docker-compose.yml because Tomcat 9 doesn't take multiple parameter from JAVA_OPTS. Maybe this error is related to #77
I have tried switching params in JAVA_OPTS but didn't work.

Here is my docker-compose.yml:

version: '3.7'
services:
    db:
      container_name: mariadb
      image: mariadb:latest
      environment:
        MYSQL_ROOT_PASSWORD: 12345
        MYSQL_DATABASE: gestione_cantieri
      ports:
       - "3306:3306"
      volumes:
       - ./docker/db:/docker-entrypoint-initdb.d

    tomcat:
      container_name: tomcat
      image: tomcat:9.0.31-jdk13-openjdk-oracle
      environment:
       - JAVA_OPTS="-Djdbcurl=jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false -Duser.language=it -Duser.region=IT"
      ports:
       - "8000:8080"
      volumes:
       - ./docker/tomcat/GCRest.war:/usr/local/tomcat/webapps/GCRest.war
       - ./docker/tomcat/context.xml:/usr/local/tomcat/conf/context.xml
      links:
        - db

Here is my context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

	<Resource name="jdbc/MYDB"
	            auth="Container"
	            type="javax.sql.DataSource"
	            username="root"
	            password="MYPWD"
	            driverClassName="org.mariadb.jdbc.Driver"
    			url="${jdbcurl}"
	            maxTotal="8"
	            maxIdle="4"/>
</Context>

I'm not sure of exactly what is a valid formatting, but adjusting your JAVA_OPTS to just -Djdbcurl=jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC -Duser.language=it -Duser.region=IT seems to work
And outputs in the logs:

04-Mar-2020 18:37:17.567 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Duser.language=it
04-Mar-2020 18:37:17.567 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Duser.region=IT
$ docker run -d --name tomcat -e JAVA_OPTS="-Djdbcurl=jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC -Duser.language=it -Duser.region=IT" tomcat:9.0.31-jdk13-openjdk-oracle
aefc8f061c4823fd89aa601d95211b7313e231e2a25bbf795091126ee74d08a5

$ docker logs -f tomcat
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
04-Mar-2020 18:37:17.550 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.31
04-Mar-2020 18:37:17.553 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Feb 5 2020 19:32:12 UTC
04-Mar-2020 18:37:17.553 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.31.0
04-Mar-2020 18:37:17.554 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
04-Mar-2020 18:37:17.554 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.15.0-65-generic
04-Mar-2020 18:37:17.554 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
04-Mar-2020 18:37:17.554 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/java/openjdk-13
04-Mar-2020 18:37:17.554 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           13.0.2+8
04-Mar-2020 18:37:17.554 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
04-Mar-2020 18:37:17.554 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
04-Mar-2020 18:37:17.555 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
04-Mar-2020 18:37:17.566 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
04-Mar-2020 18:37:17.566 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
04-Mar-2020 18:37:17.566 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
04-Mar-2020 18:37:17.566 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
04-Mar-2020 18:37:17.567 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
04-Mar-2020 18:37:17.567 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdbcurl=jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC
04-Mar-2020 18:37:17.567 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Duser.language=it
04-Mar-2020 18:37:17.567 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Duser.region=IT
04-Mar-2020 18:37:17.567 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
04-Mar-2020 18:37:17.567 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
04-Mar-2020 18:37:17.567 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
04-Mar-2020 18:37:17.567 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
04-Mar-2020 18:37:17.568 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
04-Mar-2020 18:37:17.568 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
04-Mar-2020 18:37:17.568 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
04-Mar-2020 18:37:17.568 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.23] using APR version [1.4.8].
04-Mar-2020 18:37:17.568 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
04-Mar-2020 18:37:17.568 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
04-Mar-2020 18:37:17.573 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.0.2k-fips  26 Jan 2017]
04-Mar-2020 18:37:17.778 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
04-Mar-2020 18:37:17.808 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [404] milliseconds
04-Mar-2020 18:37:17.836 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
04-Mar-2020 18:37:17.836 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.31]
04-Mar-2020 18:37:17.842 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
04-Mar-2020 18:37:17.852 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [43] milliseconds

I would hazard a guess that it is the semicolon in the url. The catalina.sh does exec/eval so I think you need some extra quotes. Maybe this?

- JAVA_OPTS="-Djdbcurl='jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC&amp;allowPublicKeyRetrieval=true&amp;useSSL=false' -Duser.language=it -Duser.region=IT"

Adding the extra quotes works

$ docker run -d --name tomcat -e JAVA_OPTS="-Djdbcurl='jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC&amp;allowPublicKeyRetrieval=true&amp;useSSL=false' -Duser.language=it -Duser.region=IT" tomcat:9.0.31-jdk13-openjdk-oracle
475498d4c0de199111524d92698ebbbe9138687157c8b19e52c6e9270fbba1b5

$ docker logs -f tomcat 
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
04-Mar-2020 23:23:40.154 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.31
04-Mar-2020 23:23:40.157 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Feb 5 2020 19:32:12 UTC
04-Mar-2020 23:23:40.157 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.31.0
04-Mar-2020 23:23:40.157 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
04-Mar-2020 23:23:40.158 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            4.15.0-65-generic
04-Mar-2020 23:23:40.158 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
04-Mar-2020 23:23:40.158 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/java/openjdk-13
04-Mar-2020 23:23:40.158 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           13.0.2+8
04-Mar-2020 23:23:40.158 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
04-Mar-2020 23:23:40.158 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
04-Mar-2020 23:23:40.158 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
04-Mar-2020 23:23:40.168 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
04-Mar-2020 23:23:40.168 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
04-Mar-2020 23:23:40.168 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
04-Mar-2020 23:23:40.169 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
04-Mar-2020 23:23:40.169 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
04-Mar-2020 23:23:40.169 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdbcurl=jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC&amp;allowPublicKeyRetrieval=true&amp;useSSL=false
04-Mar-2020 23:23:40.169 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Duser.language=it
04-Mar-2020 23:23:40.169 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Duser.region=IT
04-Mar-2020 23:23:40.169 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
04-Mar-2020 23:23:40.169 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
04-Mar-2020 23:23:40.169 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
04-Mar-2020 23:23:40.169 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
04-Mar-2020 23:23:40.170 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
04-Mar-2020 23:23:40.170 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
04-Mar-2020 23:23:40.170 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
04-Mar-2020 23:23:40.170 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.23] using APR version [1.4.8].
04-Mar-2020 23:23:40.170 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
04-Mar-2020 23:23:40.170 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
04-Mar-2020 23:23:40.173 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.0.2k-fips  26 Jan 2017]
04-Mar-2020 23:23:40.390 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
04-Mar-2020 23:23:40.423 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [416] milliseconds
04-Mar-2020 23:23:40.459 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
04-Mar-2020 23:23:40.460 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.31]
04-Mar-2020 23:23:40.467 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
04-Mar-2020 23:23:40.479 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [54] milliseconds

Closing since this is resolved

Thank you for your answer. I tried with docker run and it works so Tomcat is able to recognize 3 arguments. The problem occurs when I use docker-compose up both

- JAVA_OPTS="-Djdbcurl='jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC&amp;allowPublicKeyRetrieval=true&amp;useSSL=false' -Duser.language=it -Duser.region=IT"

and

- JAVA_OPTS="-Djdbcurl='jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false' -Duser.language=it -Duser.region=IT"

Tomcat is not able to recognize 3 arguments but just one as the logs shows:

04-Mar-2020 23:50:22.484 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdbcurl='jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC&amp;allowPublicKeyRetrieval=true&amp;useSSL=false' -Duser.language=it -Duser.region=IT
04-Mar-2020 23:55:55.609 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdbcurl='jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false' -Duser.language=it -Duser.region=IT

Try moving the quotes out further or using the alternate env syntax:

- "JAVA_OPTS=-Djdbcurl='jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC&amp;allowPublicKeyRetrieval=true&amp;useSSL=false' -Duser.language=it -Duser.region=IT"

or

  JAVA_OPTS: "-Djdbcurl='jdbc:mariadb://db:3306/MYDB?serverTimezone=UTC&amp;allowPublicKeyRetrieval=true&amp;useSSL=false' -Duser.language=it -Duser.region=IT"

Thank you @tianon, both works.