java - Docker - 独立运行 Wildfly
问题描述
我有一个配置了 WildFly 独立安装的 Ubuntu 服务器,这里我有一个可在端口 80 上访问的 Java 应用程序,我想对其进行 docker 化。创建容器时,我将整个 WildFly 目录从本地存储复制到容器,当我运行docker run -d --name dej_website -p 80:80 wildfly_dej_website:2.0
容器启动命令时,但尝试在我的本地计算机中访问时localhost
不起作用。
我究竟做错了什么?如何使用已配置的服务器访问此容器?
这是我的码头文件
FROM centos
#INSTALL JAVA
RUN yum -y install java-11-openjdk
RUN java -version
RUN mkdir /opt/DEJ_Wildfly/
#SET OPT AS WORK DIRECTORY
WORKDIR /opt/DEJ_Wildfly/
#COPY WILDFLY SERVER FILES
COPY wildfly-11.0.0.Final .
#DEFINE ENVIRONMENT VARIABLE
ENV JBOSS_HOME /opt/DEJ_Wildfly/wildfly-11.0.0.Final/
#EXECUTE SH FILE
CMD JBOSS_HOME/bin/standalone.sh -b=0.0.0.0
CMD tail -f /var/log/lastlog
#EXPOSE 80
这是docker build --tag wildfly_dej_website:2.0 .
命令日志:
Sending build context to Docker daemon 597.4MB
Step 1/9 : FROM centos
---> 300e315adb2f
Step 2/9 : RUN yum -y install java-11-openjdk
---> Using cache
---> f333f6149e02
Step 3/9 : RUN java -version
---> Using cache
---> 0110143899c7
Step 4/9 : RUN mkdir /opt/DEJ_Wildfly/
---> Running in 88bc6f0632c1
Removing intermediate container 88bc6f0632c1
---> c0ab7cc8a364
Step 5/9 : WORKDIR /opt/DEJ_Wildfly/
---> Running in 84705355ac2c
Removing intermediate container 84705355ac2c
---> 6986f8229cb0
Step 6/9 : COPY wildfly-11.0.0.Final .
---> 3caf8ec0e5d0
Step 7/9 : ENV JBOSS_HOME /opt/DEJ_Wildfly/wildfly-11.0.0.Final/
---> Running in b5f649e4e2e0
Removing intermediate container b5f649e4e2e0
---> 27d775c3d0cb
Step 8/9 : CMD JBOSS_HOME/bin/standalone.sh -b=0.0.0.0
---> Running in c7ffddb4bcdf
Removing intermediate container c7ffddb4bcdf
---> 533d3836f94d
Step 9/9 : CMD tail -f /var/log/lastlog
---> Running in f92aca5a63ba
Removing intermediate container f92aca5a63ba
---> 974e6ec6c415
Successfully built 974e6ec6c415
Successfully tagged wildfly_dej_website:2.0
这是容器列表:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
95ee0139f42c wildfly_dej_website:2.0 "/bin/sh -c 'tail -f…" 4 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp dej_website
解决方案
这里的问题出在你的 dockerfile 中。
您需要CMD
在 dockerfile 的末尾添加一个来运行您想要的命令并使其保持运行,以便 docker 文件保持活动状态并通过docker logs
命令为您提供日志。
在 dockerfile 中添加这样的一行:
RUN ./standalone.sh -b 0.0.0.0
CMD tail -f /var/log/syslog
为了使端口可以在本地机器上访问,您需要-p
在发出如下docker run
命令时使用选项:
docker run -d -p 127.0.0.1:80:8080 <image>
你可以在这里找到更多信息: https ://docs.docker.com/engine/reference/commandline/run/
推荐阅读
- python - 如何按性别显示包含多个选项的直方图
- javascript - ReactJS 无法让搜索过滤器(文本)工作
- c# - 声明式和命令式模式是一种设计模式吗?
- javascript - Close accordion upon opening another accordion with different parent
- smtp - 如何解决 net::ERR_CERT_DATE_INVALID smtp.js
- vue.js - 成功发送的电子邮件上显示联系表格和 Toast 通知
- ios - 我在 iOS 设备中的 listview 有问题
- r - 重新索引 R 中的列
- python - 如何通过 python 脚本获取 gcp stackdriver 日志?
- c++ - TCHAR* 的 C++ TEXT 宏