Ich benutze Spotifys Docker-Maven-Plugin zum Erstellen eines Docker-Bild. Genauer gesagt diese:Kleine binäre Datei wird beim Erstellen von Docker Bild mit spotify maven Plugin geändert
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
hat meine Entwicklung Maschine ein Windows 7, so dass ich renne Docker Maschine mit Version docker-machine version 0.9.0, build 15fd4c7
Docker Version diese
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.7.5
Git commit: 092cba3
Built: Wed Feb 8 08:47:51 2017
OS/Arch: windows/amd64
Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Experimental: false
Meine Anwendung verwendet ein Zertifikat, das ich will im Voraus vorbereiten und in das Bild aufnehmen.
Wenn ich das Docker-Image direkt mit Docker CLI erstellen, funktioniert die Keystore-Datei mit dem Zertifikat korrekt.
Wenn ich das Docker-Image mit dem spotify maven-Plugin erstelle, ist die Keystore-Datei beschädigt. Ein Vergleich zeigt, dass es viel größer ist, ein Vergleich seines Inhalts (Hexdump) sieht aus wie es gestreut wurde (ich weiß nicht, wie ich es besser sagen soll) mit zusätzlichen Bytes.
Ich habe ein kleines Beispiel erstellt, die das Verhalten zeigt: Projektstruktur:
-src
|-main
| |-docker
| |-binaries
| | |-example.jks
| |-Dockerfile
|-pom.xml
erstellen example.jks wie diese
keytool -genkey -keyalg RSA -alias selfsigned -keystore example.jks -storepass password -keypass password -validity 18250 -keysize 2048 -dname "CN=Unknown, OU=Example, O=Example, L=Example, ST=Unknown, C=US"
pom.xml (keytool von openjdk 8 verwenden)
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>smallbinary</artifactId>
<name>Small binary problem</name>
<version>1.0</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<resources>
<resource>
<!--
| Enable resource filtering pre dockerfile build calls.
-->
<directory>src/main/docker</directory>
<targetPath>${project.build.directory}/docker-derived</targetPath>
<filtering>true</filtering>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<executions>
<execution>
<id>build-image</id>
<phase>compile</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>${project.artifactId}</imageName>
<dockerDirectory>${project.build.directory}/docker-derived</dockerDirectory>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin><!-- Triggers the Docker build configured within the plugin management. -->
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Dockerfile
FROM openjdk:8-jre-alpine
COPY binaries/* /opt/service/
CMD ["keytool", "-list", "-keystore", "/opt/service/example.jks", "-storepass", "password"]
Ausgang, wenn sie von docker run [imagename]
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
selfsigned, Apr 3, 2017, PrivateKeyEntry,
Certificate fingerprint (SHA1): 07:56:26:66:16:82:DD:BF:6A:61:4B:94:E8:67:69:F8:77:36:5C:6D
Und leider die Ausgabe direkt per docker build .
und laufen gebaut, wenn sie mit Maven gebaut:
keytool error: java.io.IOException: Invalid keystore format
In anderen Kontexten, wenn größere Binärdateien wie Gläser kopieren, Kriege, Ohren oder Zip-Archive Ich habe keine Schwierigkeiten erlebt. Aber dieses scheint einfach nicht zu funktionieren.
Meine aktuelle Problemumgehung besteht darin, das Zertifikat direkt während der Erstellung des Abbilds über einen RUN
-Befehl in der Dockerfile zu erstellen.
Gibt es etwas, was ich vermisse?
P.S. Ich erlebe die gleichen Probleme auf meinem Linux Ubuntu 16.04 LTS Laptop.