java - Docker - 在容器上执行脚本
问题描述
我从码头工人开始。我需要使用我在本地存储上配置的 WildFly 服务器安装来创建一个映像,这个 Wildfly 有一个运行的 java 应用程序80 port
。我想创建一个运行文件的容器,我可以通过本地机器上的 urlstandalone.sh
访问它。locahost
当我尝试访问bin
目录时,我认为它是好的,但是当我执行standalone.sh
文件时,得到这个错误:
/bin/sh: ./standalone.sh: No such file or directory
如何创建图像并运行容器?
这是图像结构:
/opt
├── DEJ_Wildlfy
├── wildfly-11.0.0.Final
├── appclient
├── bin
├── standalone.bat
├── standalone.conf
├── standalone.sh <--
├── ......
├── .....
我的 Docker 文件
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
COPY wildfly-11.0.0.Final .
RUN chmod 777 -R /opt/DEJ_Wildfly/
RUN chmod +X -R /opt/DEJ_Wildfly/
#ENV JBOSS_HOME /opt/DEJ_Wildfly/wildfly-11.0.0.Final
WORKDIR /opt/DEJ_Wildfly/wildfly-11.0.0.Final/bin/
RUN pwd
RUN ls
CMD standalone.sh -b=0.0.0.0
RUN ./standalone.sh -b 0.0.0.0
CMD tail -f /var/log/syslog
#EXPOSE 80
图像创建日志docker build --tag wildfly_dej_website:2.0 .
:
Sending build context to Docker daemon 597.4MB
Step 1/14 : FROM centos
---> 300e315adb2f
Step 2/14 : RUN yum -y install java-11-openjdk
---> Using cache
---> f333f6149e02
Step 3/14 : RUN java -version
---> Using cache
---> 0110143899c7
Step 4/14 : RUN mkdir /opt/DEJ_Wildfly/
---> Running in 6ac37e57c9c0
Removing intermediate container 6ac37e57c9c0
---> 70331f8da178
Step 5/14 : WORKDIR /opt/DEJ_Wildfly/
---> Running in 9d6169492b25
Removing intermediate container 9d6169492b25
---> b597e72f443e
Step 6/14 : COPY wildfly-11.0.0.Final .
---> 44db2164e32f
Step 7/14 : RUN chmod 777 -R /opt/DEJ_Wildfly/
---> Running in f56c31767282
Removing intermediate container f56c31767282
---> 2a2e074ac50f
Step 8/14 : RUN chmod +X -R /opt/DEJ_Wildfly/
---> Running in 8fbfbade9abf
Removing intermediate container 8fbfbade9abf
---> dea87a4dc31c
Step 9/14 : WORKDIR /opt/DEJ_Wildfly/wildfly-11.0.0.Final/bin/
---> Running in 20dc329acd81
Removing intermediate container 20dc329acd81
---> 3fe555e41d7d
Step 10/14 : RUN pwd
---> Running in 1af150bd74bb
/opt/DEJ_Wildfly/wildfly-11.0.0.Final/bin
Removing intermediate container 1af150bd74bb
---> 998b9c9876a3
Step 11/14 : RUN ls
---> Running in d2ca989a5b0a
Removing intermediate container d2ca989a5b0a
---> a0dd9c8263ae
Step 12/14 : CMD standalone.sh -b=0.0.0.0
---> Running in 560a62f26227
Removing intermediate container 560a62f26227
---> ca1aed8ec311
Step 13/14 : RUN ./standalone.sh -b 0.0.0.0
---> Running in d9820e7fb967
/bin/sh: ./standalone.sh: No such file or directory
The command '/bin/sh -c ./standalone.sh -b 0.0.0.0' returned a non-zero code: 127
解决方案
当您运行时,docker build
您正在创建映像,您不想在创建映像期间运行 wildfly - CMD 命令指定在使用该映像启动容器时要运行的默认命令。
有什么理由不使用 Wildfly 已经存在的 docker hub 映像?https://hub.docker.com/r/jboss/wildfly
你可以在这里看到他们的 Dockerfile:https ://github.com/jboss-dockerfiles/wildfly/blob/master/Dockerfile
推荐阅读
- excel - VBA循环遍历范围,如果匹配:将部分行和特定列标题附加到新工作表中的表
- ember.js - 如何使用其他查询参数重新加载模型?
- node.js - 我可以将前端应用程序放在 Heroku 的外部文件夹中并根据要求提供吗?
- android - recyclerview 中的 Seekbar 也会移动 recyclerview
- r - 在 R 中绘制 cox 回归的交互作用
- flutter - 如何使用flutter_google_ad_manager插件在onAdFailedToLoad事件的情况下呈现不同的小部件?
- python - 如何在python中解析非键值json文件
- spring - 使用 Spring Cloud 函数 AWS Adapter 运行 AWS lambda 函数时,spring 不会注入(自动装配)组件 bean
- android - 在 Android 应用程序中重复请求的问题
- django - 为什么 truncatechars 不能正常工作?