2017-06-27 14 views
7

मैं मैं कुछ कोड, बनाया गया है और उपयोग करते हुए मेरे वसा जार शुरू कर दिया WildFly Swarm Project Generator का उपयोग कर KeyCloak सर्वर के साथ छोटे Wildfly Swarm आवेदन बनाया:डोकर छवि पर KeyCloak साथ Wildfly झुंड चल रहा है

java -jar -Dswarm.port.offset=100 login-service-swarm.jar 

बाद एप्लिकेशन मैं नए दायरे उपयोगकर्ताओं को नहीं जोड़ा बनाया देखें आदि। मैंने देखा कि keycloak ने मेरे लक्षित फ़ोल्डरों में 3 फाइलें बनाई हैं। उन फ़ाइलों को जहां:

  • keycloak.h2.db
  • keycloak.lock.db
  • keycloak.trace.db

तब मैं डोकर चित्र बनाने और स्थानीय डोकर में यह चलाने का फैसला किया पर्यावरण। इसलिए मैं डोकर फ़ाइल बनाई:

FROM java:openjdk-8-jdk 
ADD login-service-swarm.jar /opt/login-service-swarm.jar 
ADD keycloak.h2.db /opt/keycloak.h2.db 
ADD keycloak.lock.db /opt/keycloak.lock.db 
ADD keycloak.trace.db /opt/keycloak.trace.db 

EXPOSE 8180 
ENTRYPOINT ["java", "-jar", "-Dswarm.port.offset=100", "/opt/login-service-swarm.jar"] 

निर्मित छवि का उपयोग कर:

docker build -f Dockerfile -t login-service-swarm-v1 . 

और छवि मेरी डोकर छवि सूची में दिखाई देता है:

:

C:\Work\Java\login-service\docker>docker images 
REPOSITORY     TAG     IMAGE ID   CREATED    SIZE 
login-service-swarm-v1  latest    710cddc59623  About a minute ago 790 MB 
<none>      <none>    100c0ee60f25  3 hours ago   779 MB 
demo       latest    03d12d49ba5e  4 hours ago   760 MB 
java       openjdk-8-jdk  d23bdf5b1b1b  5 months ago   643 MB 

तो मैं इसे का उपयोग शुरू कर दिया

docker run -p 8180:8180 login-service-swarm-v1 

और यह ठीक दिख रहा था लेकिन जब मैं जाता हूं स्थानीयहोस्ट में: 8180/auth और लॉगिन करने का प्रयास करें मुझे गलत उपयोगकर्ता नाम और पासवर्ड संदेश मिलता है इसलिए मैं keycloak में लॉगिन करने में असमर्थ हूं। तो मुझे आश्चर्य है कि यह क्यों है? क्योंकि मैं डॉकर छवि में कीक्लोकैक डेटाबेस फ़ाइलों को शामिल करता हूं और यदि मैं निम्न आदेश चलाता हूं तो आप देख सकते हैं कि सभी फाइलें अपेक्षित हैं।

PS C:\> docker ps 
CONTAINER ID  IMAGE      COMMAND     CREATED    STATUS    PORTS     NAMES 
8bb4bdb3945e  login-service-swarm-v1  "java -jar -Dswarm..." 2 minutes ago  Up 2 minutes  0.0.0.0:8180->8180/tcp blissful_knuth 
PS C:\> docker exec -it 8bb4bdb3945e bash 
[email protected]:/# ls 
bin boot dev etc home keycloak.h2.db keycloak.lock.db keycloak.trace.db lib lib64 media mnt opt proc root run sbin srv sys tmp usr var 
[email protected]:/# cd opt 
[email protected]:/opt# ls 
keycloak.h2.db keycloak.lock.db keycloak.trace.db login-service-swarm.jar 

तो कैच कहां है ??

+0

क्या लॉगिन-सेवा-झुंड कुंजीक्लोक सर्वर या कुंजीक्लोक द्वारा सुरक्षित माइक्रोस्कोयर होने का मतलब है? यह – Ken

+0

@ केन पर मुझे पूरी तरह से स्पष्ट नहीं है: लॉगिन-सेवा-स्वर्ग एक कीक्लोक सर्वर – Kiki

उत्तर

5

ऐसा लगता है कि स्वार कीक्लोक सर्वर डिफ़ॉल्ट रूप से डायर निष्पादित जावा (मतलब user.dir) में कीक्लोक * .db पढ़ता है। कंटेनर में झुकाव प्रक्रिया /opt/keycloak*.db नहीं पढ़ती क्योंकि जावा / पर चलता है।

आप wildfly.swarm.keycloak.server.db sysprop के साथ डेटा डीआईआर बदल सकते हैं। https://github.com/wildfly-swarm/wildfly-swarm/blob/2017.6.1/fractions/keycloak-server/src/main/java/org/wildfly/swarm/keycloak/server/runtime/KeycloakDatasourceCustomizer.java#L52

कृपया इसे डॉकरफ़ाइल में आज़माएं;

ENTRYPOINT ["java", "-jar", "/opt/login-service-swarm.jar", "-Dwildfly.swarm.keycloak.server.db=/opt/keycloak"] 

या, आप भी docker run साथ -w विकल्प का उपयोग कर सकते हैं।

$ docker run --help 
-w, --workdir string    Working directory inside the container 

निम्न आदेश भी काम करना चाहिए।

docker run -p 8180:8180 -w /opt login-service-swarm-v1 

पी.एस.

मैं डॉकरफ़ाइल में डेटा फ़ाइलों को जोड़ने के बजाय वॉल्यूम या वॉल्यूम कंटेनर का उपयोग करने की सलाह देता हूं। https://docs.docker.com/engine/tutorials/dockervolumes/

+0

एक आकर्षण की तरह काम करता है। धन्यवाद! – Kiki

+0

अच्छी चीजें emag, धन्यवाद! – Ken

संबंधित मुद्दे