我使用WildFly Swarm项目生成器创建了一个小的Wildfly Swarm应用,并使用KeyCloak服务器。我添加了一些代码,构建并启动了我的fat jar:
java -jar -Dswarm.port.offset=100 login-service-swarm.jar
应用程序启动后,我创建了新的领域,并添加了用户等等。然后我注意到Keycloak在我的目标文件夹中创建了3个文件。这些文件是:
- keycloak.h2.db
- keycloak.lock.db
- keycloak.trace.db
然后,我决定创建Docker镜像并在本地Docker环境中运行它。所以我创建了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"]
使用以下方法构建镜像:
docker build -f Dockerfile -t login-service-swarm-v1 .
我的 Docker 镜像列表中显示了一张图片:
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
当我去localhost:8180/auth尝试登录时,出现错误的用户名和密码提示信息,因此我无法登录到keycloak。尽管我在docker镜像中手动添加了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
root@8bb4bdb3945e:/# 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
root@8bb4bdb3945e:/# cd opt
root@8bb4bdb3945e:/opt# ls
keycloak.h2.db keycloak.lock.db keycloak.trace.db login-service-swarm.jar
那么问题在哪里呢?