2017-06-27 26 views
7

Tôi tạo ra nhỏ Wildfly Swarm ứng dụng với KeyCloak máy chủ sử dụng WildFly Swarm Project Generator tôi thêm một số mã, xây dựng và bắt đầu jar chất béo của tôi sử dụng:Chạy Wildfly Swarm với KeyCloak trên hình Docker

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

Sau khi ứng dụng nhìn chằm chằm tôi tạo ra lĩnh vực mới được thêm người dùng vv Sau đó, tôi nhận thấy keycloak đã tạo 3 tệp trong thư mục đích của tôi. Những file đó:

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

Sau đó, tôi quyết định tạo ra hình ảnh Docker và chạy nó trong Docker địa phương môi trường. Vì vậy, tôi đã tạo ra tập tin Docker:

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"] 

hình ảnh xây dựng sử dụng:

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

Và hình ảnh có thể nhìn thấy trong danh sách hình ảnh Docker tôi:

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 

Vì vậy, tôi bắt đầu nó bằng cách sử:

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

Và nó nhìn chằm chằm ok nhưng khi tôi đi để localhost: 8180/auth và cố gắng đăng nhập tôi nhận được tên người dùng sai và mật khẩu tin nhắn vì vậy tôi không thể đăng nhập vào keycloak. Vì vậy, tôi tự hỏi tại sao điều này? Bởi vì tôi manuayl bao gồm các tệp cơ sở dữ liệu keycloak trong hình ảnh docker và nếu tôi chạy các lệnh sau, bạn có thể thấy tất cả các tệp có ở đó như mong đợi.

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 

Vì vậy, nơi bắt?

+0

Dịch vụ đăng nhập-dịch vụ có nghĩa là Máy chủ Keycloak hoặc một dịch vụ được bảo vệ bởi Keycloak? Điều đó không hoàn toàn rõ ràng với tôi tại thời điểm này – Ken

+0

@Ken: đăng nhập-dịch vụ-swarm là một Máy chủ Keycloak – Kiki

Trả lời

5

Có vẻ như máy chủ Swarm Keycloak đọc keycloak * .db trong thư mục thực thi java (có nghĩa là user.dir) theo mặc định. Quá trình swarm trong container không đọc /opt/keycloak*.db vì java chạy trên /.

Bạn có thể thay đổi thư mục dữ liệu bằng 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

Hãy dùng thử trong Dockerfile;

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

Hoặc, bạn cũng có thể sử dụng tùy chọn -w với docker run.

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

Lệnh sau đây cũng được yêu cầu hoạt động.

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

T.B.

Tôi khuyên bạn nên sử dụng Vùng chứa âm lượng hoặc Vùng chứa thay vì thêm tệp dữ liệu trong Dockerfile. https://docs.docker.com/engine/tutorials/dockervolumes/

+0

Làm việc như một sự quyến rũ. Cảm ơn! – Kiki

+0

Công cụ tuyệt vời emag, cảm ơn! – Ken

Các vấn đề liên quan