Closed Daniil56 closed 5 years ago
Hi @Daniil56 — please take a look at Jib's <extraDirectories>
support. You can place the .jks file wherever you like in the container image and reference the corresponding path in your URL.
Hi @briandealwis - thx , but i dont now, how to use
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<description>RestFull api-web service for cdn</description>
<properties>
<java.version>11</java.version>
<lombok.version>1.16.18</lombok.version>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<mysql.url>jdbc:mysql://rc1c-hnni8m0sn1rgrd9y.mdb.yandexcloud.net:3306/formrestapi_db?useUnicode=true&\
verifyServerCertificate=true&useSSL=true&requireSSL=true&trustCertificateKeyStoreUrl=file:root.jks&trustCertificateKeyStorePassword=any_pass_you_want
</mysql.url>
<activatedProperties>dev</activatedProperties>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>docker</id>
<properties>
<mysql.url>jdbc:mysql://rc1c-hnni8m0sn1rgrd9y.mdb.yandexcloud.net:3306/formrestapi_db?useUnicode=true&\
verifyServerCertificate=true&useSSL=true&requireSSL=true&trustCertificateKeyStoreUrl=file:///jetty///webapps/ROOT///WEB-INF/classes////path///to///root.jks&trustCertificateKeyStorePassword=any_pass_you_want
</mysql.url>
</properties>
</profile>
</profiles>
When mvn compile with flag
-p docker
this project successfully which runs in a Docker container. I also tried to use your hint, here's what I got:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.5.1</version>
<configuration>
<to>
<image>cr.yandex/crpg38g0mr9t5l3sl1gh/${project.artifactId}</image>
<tags>${project.version}</tags>
</to>
<extraDirectories>
<paths>
<path>${project.basedir}/src/main/resources/path/to</path>
</paths>
</extraDirectories>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
I couldn't access that file .jks, inside the container because I don't know the full path to it. At this point I want to know if it is possible to make jdbc: mysql url the same as for Docker container compilation and local compilation At the moment, I'm replacing the file path .jks in each profile project structure: target structure:
I couldn't access that file .jks, inside the container because I don't know the full path to it.
Basically each file located under the directory specified in <path>
has the <path>
value stripped off, and the remainder is resolved against the root.
So given your configuration:
<paths>
<path>${project.basedir}/src/main/resources/path/to</path>
</paths>
then the file src/main/resources/path/to/root.jks
would be placed in the root directory, and so can be referenced as file:///root.jks
.
If you'd instead specified:
<path>${project.basedir}/src/main/resources/</path>
then the file would be copied to /path/to/root.jks
and the file would be referenced as file:/path/to/root.jks
.
@briandealwis Thank you! Now I have a better understanding of the jib plugin.
Also I additionally put the root.jks in the project root.
Now if I set the value of the external directory as:
<paths>
<path>${project.basedir}/src/main/resources/path/to</path>
</paths>
And set path to root.jks in spring.datasource.url
. at:
file:///root.jks
After compilation, the Docker container runs successfully. However, startup on the local machine fails with Caused by: java.io.FileNotFoundException: \root.jks (Не удается найти указанный файл)
in eng The system cannot find the file specified
If I change the file path to:
file:root.jks
in the Docker container I get a similar error from slash. this time because of his absence.
Caused by: java.io.FileNotFoundException: root.jks (No such file or directory)
And local startup is successful.
I think the profile approach looks OK to me. For the local startup, you are directly executing your application in your own local environment (your laptop), which can't be identical to the environment where your application containerized in an image will run in production. That is, you are not running your app in a container locally (which could be a good thing for fast dev iterations) and your app should somehow be able to find the root.jks
files from your local filesystem. On the other hand, for the containerized app, you will certainly need to put the root.jks
files somewhere in the container filesystem, whose path would most likely different from path of the file on your laptop.
Thanks @chanseokoh and @briandealwis. The issue is fixed.
Environment:
Description of the issue: Hi, im new at docker and jib plugin. And my english very bad. I am using spring boot 2, and i need to connect the mysql database over ssl connection. To do this in the file
application.properties
I specify the following line:spring.datasource.url=jdbc:mysql://rc1-hnni8m0sn1rgrd9y.mdb.yandex cloud.net:3306/form rest api_db?useUnicode=true&\verifyServerCertificate=true&useSSL=true&requireSSL=true&trustCertificateKeyStoreUrl=file:///path///to///root.jks&trustCertificateKeyStorePassword=any_pass_you_want
where:
trustCertificateKeyStoreUrl=file:///path///to///root.jks
is the path to the database host certificate key file.After the
mvn clean install -DskipTests
command, the Docker image is generated and successfully sent to the Yandex container registery. Then, after executing thedocker run
command for this register, the application starts with a Caused by error:java.io.FileNotFoundException: /path/to/root.jks (No such file or directory)
project structure:
https://clip2net.com/s/43nEeWG
Expected behavior: The expected behavior is to successfully start the REST API service with an ssl connection to an external database in a Docker container. The expected behavior is achieved by using such a string in the
application.properties
:spring.datasource.url=jdbc:mysql://rc1c-hnni8m0sn1rgrd9y.mdb.yandexcloud.net:3306/formrestapi_db?useUnicode=true&\ verifyServerCertificate=true&useSSL=true&requireSSL=true&trustCertificateKeyStoreUrl=file:///jetty///webapps/ROOT///WEB-INF/classes////path///to///root.jks&trustCertificateKeyStorePassword=any_pass_you_want
where:
trustCertificateKeyStoreUrl=file:///jetty///webapps/ROOT///WEB-INF/classes////path///to///root.jks
is the path to the root file.jks after you compile war file How to make path jks file to available to jib? Steps to reproduce:jib-maven-plugin
Configuration:pom.xml (click to expand)
```xmlLog output (click to expand):
``` ubuntu@ubuntu-VirtualBox:~$ docker run cr.yandex/crpg38g0mr9t5l3sl1gh/form:0.1.17-snapshot 2019-09-02 12:33:31.769:INFO::main: Logging initialized @1013ms to org.eclipse.jetty.util.log.StdErrLog 2019-09-02 12:33:32.257:INFO:oejs.Server:main: jetty-9.4.14.v20181114; built: 2018-11-14T21:20:31.478Z; git: c4550056e785fb5665914545889f21dc136ad9e6; jvm 11.0.4+11-post-Debian-1bpo91 2019-09-02 12:33:32.293:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///jetty/webapps/] at interval 1 2019-09-02 12:33:34.407:WARN:oeja.AnnotationParser:qtp407697359-16: org.slf4j.impl.StaticLoggerBinder scanned from multiple locations: jar:file:///jetty/webapps/ROOT/WEB-INF/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class, jar:file:///jetty/webapps/ROOT/WEB-INF/lib/slf4j-nop-1.7.26.jar!/org/slf4j/impl/StaticLoggerBinder.class 2019-09-02 12:33:34.408:WARN:oeja.AnnotationParser:qtp407697359-16: org.slf4j.impl.StaticMDCBinder scanned from multiple locations: jar:file:///jetty/webapps/ROOT/WEB-INF/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticMDCBinder.class, jar:file:///jetty/webapps/ROOT/WEB-INF/lib/slf4j-nop-1.7.26.jar!/org/slf4j/impl/StaticMDCBinder.class 2019-09-02 12:33:34.408:WARN:oeja.AnnotationParser:qtp407697359-16: org.slf4j.impl.StaticMarkerBinder scanned from multiple locations: jar:file:///jetty/webapps/ROOT/WEB-INF/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticMarkerBinder.class, jar:file:///jetty/webapps/ROOT/WEB-INF/lib/slf4j-nop-1.7.26.jar!/org/slf4j/impl/StaticMarkerBinder.class 2019-09-02 12:33:34.985:WARN:oeja.AnnotationParser:qtp407697359-19: org.apache.commons.logging.Log scanned from multiple locations: jar:file:///jetty/webapps/ROOT/WEB-INF/lib/commons-logging-1.0.4.jar!/org/apache/commons/logging/Log.class, jar:file:///jetty/webapps/ROOT/WEB-INF/lib/spring-jcl-5.1.8.RELEASE.jar!/org/apache/commons/logging/Log.class 2019-09-02 12:33:34.988:WARN:oeja.AnnotationParser:qtp407697359-19: org.apache.commons.logging.LogFactory$1 scanned from multiple locations: jar:file:///jetty/webapps/ROOT/WEB-INF/lib/commons-logging-1.0.4.jar!/org/apache/commons/logging/LogFactory$1.class, jar:file:///jetty/webapps/ROOT/WEB-INF/lib/spring-jcl-5.1.8.RELEASE.jar!/org/apache/commons/logging/LogFactory$1.class 2019-09-02 12:33:34.988:WARN:oeja.AnnotationParser:qtp407697359-19: org.apache.commons.logging.LogFactory scanned from multiple locations: jar:file:///jetty/webapps/ROOT/WEB-INF/lib/commons-logging-1.0.4.jar!/org/apache/commons/logging/LogFactory.class, jar:file:///jetty/webapps/ROOT/WEB-INF/lib/spring-jcl-5.1.8.RELEASE.jar!/org/apache/commons/logging/LogFactory.class 2019-09-02 12:33:34.988:WARN:oeja.AnnotationParser:qtp407697359-19: org.apache.commons.logging.impl.NoOpLog scanned from multiple locations: jar:file:///jetty/webapps/ROOT/WEB-INF/lib/commons-logging-1.0.4.jar!/org/apache/commons/logging/impl/NoOpLog.class, jar:file:///jetty/webapps/ROOT/WEB-INF/lib/spring-jcl-5.1.8.RELEASE.jar!/org/apache/commons/logging/impl/NoOpLog.class 2019-09-02 12:33:34.989:WARN:oeja.AnnotationParser:qtp407697359-19: org.apache.commons.logging.impl.SimpleLog scanned from multiple locations: jar:file:///jetty/webapps/ROOT/WEB-INF/lib/commons-logging-1.0.4.jar!/org/apache/commons/logging/impl/SimpleLog.class, jar:file:///jetty/webapps/ROOT/WEB-INF/lib/spring-jcl-5.1.8.RELEASE.jar!/org/apache/commons/logging/impl/SimpleLog.class 2019-09-02 12:33:35.202:WARN:oeja.AnnotationParser:qtp407697359-11: org.apache.jackrabbit.webdav.MultiStatus scanned from multiple locations: jar:file:///jetty/webapps/ROOT/WEB-INF/lib/jackrabbit-webdav-1.5.0.jar!/org/apache/jackrabbit/webdav/MultiStatus.class, jar:file:///jetty/webapps/ROOT/WEB-INF/lib/wagon-webdav-jackrabbit-1.0-beta-5.jar!/org/apache/jackrabbit/webdav/MultiStatus.class 2019-09-02 12:33:35.204:WARN:oeja.AnnotationParser:qtp407697359-11: org.apache.jackrabbit.webdav.client.methods.XmlRequestEntity scanned from multiple locations: jar:file:///jetty/webapps/ROOT/WEB-INF/lib/jackrabbit-webdav-1.5.0.jar!/org/apache/jackrabbit/webdav/client/methods/XmlRequestEntity.class, jar:file:///jetty/webapps/ROOT/WEB-INF/lib/wagon-webdav-jackrabbit-1.0-beta-5.jar!/org/apache/jackrabbit/webdav/client/methods/XmlRequestEntity.class 2019-09-02 12:33:35.208:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=2109ms SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/jetty/webapps/ROOT/WEB-INF/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/jetty/webapps/ROOT/WEB-INF/lib/slf4j-nop-1.7.26.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder] 2019-09-02 12:33:35.698:INFO:oejshC.ROOT:main: 2 Spring WebApplicationInitializers detected on classpath . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.6.RELEASE) 2019-09-02 12:33:37.052 INFO 1 --- [ main] ru.webstr.FormApplication : Starting FormApplication on 763dcf3e3ff7 with PID 1 (/jetty/webapps/ROOT/WEB-INF/classes started by root in /jetty) 2019-09-02 12:33:37.084 INFO 1 --- [ main] ru.webstr.FormApplication : No active profile set, falling back to default profiles: default 2019-09-02 12:33:39.418 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode. 2019-09-02 12:33:39.615 INFO 1 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 186ms. Found 4 repository interfaces. 2019-09-02 12:33:40.683 INFO 1 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$d11535e5] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2019-09-02 12:33:40.789 INFO 1 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.hateoas.config.HateoasConfiguration' of type [org.springframework.hateoas.config.HateoasConfiguration$$EnhancerBySpringCGLIB$$50958317] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2019-09-02 12:33:40.848:INFO:oejshC.ROOT:main: Initializing Spring embedded WebApplicationContext 2019-09-02 12:33:40.852 INFO 1 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3636 ms 2019-09-02 12:33:42.914 INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2019-09-02 12:33:43.356 ERROR 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Cannot open JKS [/path/to/root.jks (No such file or directory)] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[na:na] at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.ExportControlled.getSSLSocketFactoryDefaultOrConfigured(ExportControlled.java:453) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:103) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:4914) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1663) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1224) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2199) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2230) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2025) ~[mysql-connector-java-5.1.47.jar:5.1.47] at com.mysql.jdbc.ConnectionImpl.Additional Information: The application was compiled with Windows 7 Home 64 bit. Runs in Docker container happened in VirtualBox Ubuntu 18.04. Lts