bash - sh脚本在docker容器中不起作用

标签 bash docker

我在Docker容器中运行.sh脚本时遇到问题。它给了我:

ml_1 | 2018-08-02 08:31:32,680 INFO spawned: 'datagrid' with pid 18

ml_1 | 2018-08-02 08:31:32,686 INFO exited: datagrid (exit status 127; not expected)

ml_1 | 2018-08-02 08:31:38,732 INFO gave up: datagrid entered FATAL state, too many start retries too quickly



我的剧本:
#!/bin/bash

# Description: 

LIB=/home/com/com_server/lib
CONFIG=/home/com/com_server/config
JAVA="/usr/bin/java"
CLASSPATH=${CONFIG}:blackBoard.xml:${CONFIG}:hazelcastContext.xml:${CONFIG}:comAppConfig.xml:${LIB}:com-calc-0.0.1.jar:${LIB}:com-common-0.0.1.jar:${LIB}:com-hazelcast-0.0.1-jar-with-dependencies.jar:${LIB}:escomled-server-0.0.1.jar:${LIB}:spring-webmvc-4.3.0.RELEASE.jar:${LIB}:spring-jdbc-4.3.0.RELEASE.jar:${LIB}:spring-context-4.3.0.RELEASE.jar:${LIB}:hazelcast-spring-3.7.2.jar:${LIB}:hazelcast-client-3.8.3.jar:${LIB}:hazelcast-spring-3.8.3.jar:${LIB}:hazelcast-all-3.8.3.jar:${LIB}:hazelcast-3.8.3.jar:${LIB}:spring-core-4.3.0.RELEASE.jar:${LIB}:spring-beans-4.3.0.RELEASE.jar:${LIB}:log4j-1.2.16.jar:${LIB}:commons-logging-1.2.jar:${LIB}:spring-asm-4.3.0.RELEASE.jar:${LIB}:spring-expression-4.3.0.RELEASE.jar:${LIB}:mysql-connector-java-5.1.34.jar:${LIB}:spring-tx-4.3.0.RELEASE.jar:${LIB}:commons-lang-2.6.jar:${LIB}:mail-1.4.1.jar:${LIB}:commons-digester-2.0.jar:${LIB}:commons-codec-1.4.jar:${LIB}:slf4j-log4j12-1.5.10.jar:${LIB}:slf4j-api-1.5.10.jar:${LIB}:config/createClient.sql:${LIB}:commons-fileupload-1.2.jar:${LIB}:commons-io-1.4.jar:${LIB}:spring-web-4.3.0.RELEASE.jar:${LIB}:opencsv-2.3.jar:${LIB}:spring-aop-4.3.0.RELEASE.jar:${LIB}:aopalliance-1.0.jar:${LIB}:pdfbox-1.8.9.jar:${LIB}:fontbox-1.8.9.jar:${LIB}:jempbox-1.8.9.jar:${LIB}:imgscalr-lib-4.2.jar:${LIB}:dom4j-1.6.1.jar:${LIB}:xmlbeans-2.6.0.jar:${LIB}:jasypt-1.9.2.jar:${LIB}:jackson-mapper-asl-1.9.4.jar:${LIB}:jackson-core-asl-1.9.4.jar:${LIB}:jackson-jaxrs-1.9.4.jar:${LIB}:cglib-2.2.2.jar:${LIB}:asm-3.3.1.jar:${LIB}:textmagic-java-sdk-1.2.0.jar:${LIB}:httpclient-4.5.5.jar:${LIB}:commons-dbcp2-2.3.0.jar:${LIB}:commons-pool2-2.5.0.jar:${LIB}:poi-3.17.jar:${LIB}:poi-ooxml-3.17.jar:${LIB}:commons-collections4-4.1.jar:${LIB}:poi-ooxml-schemas-3.17.jar
SERVER_NAME="com_datagrid"
SLOG_NAME="com_datagrid"
PID_FILE="/var/run/${SLOG_NAME}.pid"
MEMORY="512";
ARGS="-Djava.awt.headless=true -Xmx1024M -Dcom.sun.management.jmxremote=true \
                  -Dcom.sun.management.jmxremote.port=9092 \
                  -Dcom.sun.management.jmxremote.ssl=false \
                  -Dcom.sun.management.jmxremote.authenticate=false \
                  -Djava.rmi.server.hostname=10.72.4.13 -Dhazelcast.diagnostics.enabled=true -Dhazelcast.diagnostics.metric.level=info -Dhazelcast.diagnostics.invocation.sample.period.seconds=30 -Dhazelcast.diagnostics.pending.invocations.period.seconds=30 -Dhazelcast.diagnostics.slowoperations.period.seconds=30"
start() {
     tput setaf 2;echo "---- STARTING *** com_datagrid *** DAEMON ----"
     ${JAVA} ${ARGS} -classpath "${CLASSPATH}" com.com.blackboard.main.Server &
     javaPID=$!
     tput setaf 7;echo "*** com_datagrid *** backgrounded with process id '${javaPID}'"
     #echo ${javaPID} > ${PID_FILE}
}

stop() {
   echo "STOPING *** com_datagrid ***"
   start-stop-daemon --stop \
      --pidfile ${PID_FILE}
}
restart() {
     stop
     start
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
esac

exit 0;

我的Dockerfile:
#FROM maven:3.3.9-jdk-8-alpine as build-env
#COPY . /comML
#WORKDIR comML
#RUN mvn package

FROM openjdk:8-jdk-alpine
WORKDIR /comML
ADD . /comML
ADD ./MLScripts/lib comML/lib
ADD ./MLScripts/config com/config
ADD ./MLScripts/config com/home/com/com_server/config
ADD ./MLScripts comML/MLScripts
ADD target/com-machine-learning-0.0.1-SNAPSHOT-jar-with-dependencies.jar comML/lib/com-machine-learning-0.0.1-SNAPSHOT-jar-with-dependencies.jar
COPY ./MLScripts/wrapper.sh /com/MLScripts/wrapper.sh
#CMD ["export", "CLASSPATH=comML/home/com/com_server/config/blackBoard.xml;EscomledML/home/com/com_server/config/appContext.xml;comML/home/com/com_server/config/config.properties;comML/home/com/com_server/config/com.properties;comML/home/com/escomled_server/config/createClient.sql;EscomledML/home/escomled/escomled_server/config/escomled.properties;com/home/com/com_server/config/global_database.sql;comML/home/com/com_server/config/release.sql;comML/home/escomled/com_server/config/taskExecutors.xml;comML/home/com/com_server/config/test-applicationContext.xml;C:/home/com/com_server/lib/spring-jdbc-4.3.0.RELEASE.jar;C:/home/escomled/escomled_server/lib/escomled-common-0.0.1.jar;C:/home/escomled/escomled_server/lib/escomled-machine-learning-0.0.1-SNAPSHOT-jar-with-dependencies.jar;C:/home/escomled/escomled_server/lib/assertj-core-3.3.0.jar;C:/home/escomled/escomled_server/lib/curator-test-2.9.0.jar;C:/home/escomled/escomled_server/lib/h2o-genmodel-3.18.0.1.jar;C:/home/escomled/escomled_server/lib/hazelcast-all-3.8.3.jar;C:/home/escomled/escomled_server/lib/jcl-over-slf4j-1.7.1.jar;C:/home/escomled/escomled_server/lib/junit-4.12.jar;C:/home/escomled/escomled_server/lib/spring-jdbc-4.3.0.RELEASE.jar;C:/home/escomled/escomled_server/lib/spring-dao-2.0.3.jar;C:/home/escomled/escomled_server/lib/kafka_2.11-0.10.2.1-cp1.jar;C:/home/escomled/escomled_server/lib/kafka_2.11-0.10.2.1-cp1-test.jar;C:/home/escomled/escomled_server/lib/kafka-clients-0.10.2.1-cp1.jar;C:/home/escomled/escomled_server/lib/spring-context-4.3.0.RELEASE.jar;C:/home/escomled/escomled_server/lib/spring-core-4.3.0.RELEASE.jar;C:/home/escomled/escomled_server/lib/spring-tx-4.3.0.RELEASE.jar;C:/home/escomled/escomled_server/lib/hazelcast-all-3.8.3.jar;C:/home/escomled/escomled_server/lib/kafka-clients-0.10.2.1-cp1-test.jar;C:/home/escomled/escomled_server/lib/kafka-schema-registry-3.2.1.jar;C:/home/escomled/escomled_server/lib/kafka-schema-registry-3.2.1-tests.jar;C:/home/escomled/escomled_server/lib/kafka-streams-0.10.2.1-cp1.jar;C:/home/escomled/escomled_server/lib/slf4j-api-1.7.1.jar;C:/home/escomled/escomled_server/lib/slf4j-log4j12-1.7.1.jar"] 
#ENTRYPOINT ["java", "-cp", "EscomledML/home/escomled/escomled_server/config/blackBoard.xml;EscomledML/home/escomled/escomled_server/config/appContext.xml;EscomledML/home/escomled/escomled_server/config/config.properties;EscomledML/home/escomled/escomled_server/config/escomled.properties;EscomledML/home/escomled/escomled_server/config/createClient.sql;EscomledML/home/escomled/escomled_server/config/escomled.properties;EscomledML/home/escomled/escomled_server/config/global_database.sql;EscomledML/home/escomled/escomled_server/config/release.sql;EscomledML/home/escomled/escomled_server/config/taskExecutors.xml;EscomledML/home/escomled/escomled_server/config/test-applicationContext.xml;C:/home/escomled/escomled_server/lib/spring-jdbc-4.3.0.RELEASE.jar;C:/home/escomled/escomled_server/lib/escomled-common-0.0.1.jar;C:/home/escomled/escomled_server/lib/escomled-machine-learning-0.0.1-SNAPSHOT-jar-with-dependencies.jar;C:/home/escomled/escomled_server/lib/assertj-core-3.3.0.jar;C:/home/escomled/escomled_server/lib/curator-test-2.9.0.jar;C:/home/escomled/escomled_server/lib/h2o-genmodel-3.18.0.1.jar;C:/home/escomled/escomled_server/lib/hazelcast-all-3.8.3.jar;C:/home/escomled/escomled_server/lib/jcl-over-slf4j-1.7.1.jar;C:/home/escomled/escomled_server/lib/junit-4.12.jar;C:/home/escomled/escomled_server/lib/spring-jdbc-4.3.0.RELEASE.jar;C:/home/escomled/escomled_server/lib/spring-dao-2.0.3.jar;C:/home/escomled/escomled_server/lib/kafka_2.11-0.10.2.1-cp1.jar;C:/home/escomled/escomled_server/lib/kafka_2.11-0.10.2.1-cp1-test.jar;C:/home/escomled/escomled_server/lib/kafka-clients-0.10.2.1-cp1.jar;C:/home/escomled/escomled_server/lib/spring-context-4.3.0.RELEASE.jar;C:/home/escomled/escomled_server/lib/spring-core-4.3.0.RELEASE.jar;C:/home/escomled/escomled_server/lib/spring-tx-4.3.0.RELEASE.jar;C:/home/escomled/escomled_server/lib/hazelcast-all-3.8.3.jar;C:/home/escomled/escomled_server/lib/kafka-clients-0.10.2.1-cp1-test.jar;C:/home/escomled/escomled_server/lib/kafka-schema-registry-3.2.1.jar;C:/home/escomled/escomled_server/lib/kafka-schema-registry-3.2.1-tests.jar;C:/home/escomled/escomled_server/lib/kafka-streams-0.10.2.1-cp1.jar;C:/home/escomled/escomled_server/lib/slf4j-api-1.7.1.jar;C:/home/escomled/escomled_server/lib/slf4j-log4j12-1.7.1.jar", "com.escomled.machinelearning.ml.Escomled_Streams_H2O_ML"]
#CMD ["java", "-jar", "escomled-machine-learning-0.0.1-SNAPSHOT-jar-with-dependencies.jar"]
EXPOSE 8085
#ENTRYPOINT ["sh", "EscomledML/MLScripts/wrapper.sh"]
#ENTRYPOINT ["sh", "EscomledML/MLScripts/escomled_data_grid.sh"]
#CMD ["sh", "EscomledML/MLScripts/escomled_dirwatcher.sh", "&&", "sh", "EscomledML/MLScripts/escomled_startmap.sh", "&&", "sh", "EscomledML/MLScripts/escomled_ml.sh"]

FROM ubuntu:14.04
RUN apt-get update && apt-get install -y supervisor
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD /usr/bin/supervisord -n

还有我的.bat脚本:
set LIB=C:/home/escomled/escomled_server/lib
set CONFIG=C:/home/escomled/escomled_server/config
set JAVA_HOME="C:\Program Files\Java\jdk1.8.0_144"
set CLASSPATH=%CONFIG%/blackBoard.xml;%CONFIG%/hazelcastContext.xml;%CONFIG%/escomledAppConfig.xml;%LIB%/escomled-calc-0.0.1.jar;%LIB%/escomled-common-0.0.1.jar;%LIB%/escomled-hazelcast-0.0.1-jar-with-dependencies.jar;%LIB%/escomled-server-0.0.1.jar;%LIB%/spring-webmvc-4.3.0.RELEASE.jar;%LIB%/spring-jdbc-4.3.0.RELEASE.jar;%LIB%/spring-context-4.3.0.RELEASE.jar;%LIB%/hazelcast-spring-3.7.2.jar;%LIB%/hazelcast-client-3.8.3.jar;%LIB%/hazelcast-spring-3.8.3.jar;%LIB%/hazelcast-all-3.8.3.jar;%LIB%/hazelcast-3.8.3.jar;%LIB%/spring-core-4.3.0.RELEASE.jar;%LIB%/spring-beans-4.3.0.RELEASE.jar;%LIB%/log4j-1.2.16.jar;%LIB%/commons-logging-1.2.jar;%LIB%/spring-asm-4.3.0.RELEASE.jar;%LIB%/spring-expression-4.3.0.RELEASE.jar;%LIB%/mysql-connector-java-5.1.34.jar;%LIB%/spring-tx-4.3.0.RELEASE.jar;%LIB%/commons-lang-2.6.jar;%LIB%/mail-1.4.1.jar;%LIB%/commons-digester-2.0.jar;%LIB%/commons-codec-1.4.jar;%LIB%/slf4j-log4j12-1.5.10.jar;%LIB%/slf4j-api-1.5.10.jar;%LIB%/config/createClient.sql;%LIB%/commons-fileupload-1.2.jar;%LIB%/commons-io-1.4.jar;%LIB%/spring-web-4.3.0.RELEASE.jar;%LIB%/opencsv-2.3.jar;%LIB%/spring-aop-4.3.0.RELEASE.jar;%LIB%/aopalliance-1.0.jar;%LIB%/pdfbox-1.8.9.jar;%LIB%/fontbox-1.8.9.jar;%LIB%/jempbox-1.8.9.jar;%LIB%/imgscalr-lib-4.2.jar;%LIB%/dom4j-1.6.1.jar;%LIB%/xmlbeans-2.6.0.jar;%LIB%/jasypt-1.9.2.jar;%LIB%/jackson-mapper-asl-1.9.4.jar;%LIB%/jackson-core-asl-1.9.4.jar;%LIB%/jackson-jaxrs-1.9.4.jar;%LIB%/cglib-2.2.2.jar;%LIB%/asm-3.3.1.jar;%LIB%/textmagic-java-sdk-1.2.0.jar;%LIB%/httpclient-4.5.5.jar;%LIB%/commons-dbcp2-2.3.0.jar;%LIB%/commons-pool2-2.5.0.jar;%LIB%/poi-3.17.jar;%LIB%/poi-ooxml-3.17.jar;%LIB%/commons-collections4-4.1.jar;%LIB%/poi-ooxml-schemas-3.17.jar

set SERVER_NAME="escomled_server"
set SLOG_NAME="escomled_server"
set PID_FILE="/var/run/%SLOG_NAME%.pid"
set MEMORY="512";
 set ARGS="-Djava.awt.headless=true -Xmx1024M -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9092 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.72.4.13 -Dhazelcast.diagnostics.enabled=true -Dhazelcast.diagnostics.metric.level=info -Dhazelcast.diagnostics.invocation.sample.period.seconds=30 -Dhazelcast.diagnostics.pending.invocations.period.seconds=30 -Dhazelcast.diagnostics.slowoperations.period.seconds=30"
:start
   ECHO "---- STARTING *** DataGrid *** DAEMON ----"
   %JAVA_HOME%\bin\java.exe %ARGS% -classpath %CLASSPATH% com.escomled.blackboard.main.DataGridServer
   ECHO "*** DataGrid *** backgrounded with process id %javaPID%"
   ECHO %javaPID% > %PID_FILE%
   EXIT /B 0

:stop
   ECHO "STOPING *** DataGrid ***"
   start-stop-daemon --stop --pidfile %PID_FILE%
   EXIT /B 0

:restart
     CALL :stop
     CALL :start

rem case "$1" in
rem  start)
rem        start
rem        ;;
rem  stop)
rem        stop
rem        ;;
rem  restart)
rem        stop
rem        start
rem        ;;
rem esac

rem exit 0;

如果我没有解释正确的话,我将编辑问题。谢谢。

最佳答案

I have a problem running a .sh script inside a docker container



您在这里遇到了许多问题……仅需注意以下几点:
  • Dockerfile来看,您的配置文件结构有点混乱:
    WORKDIR /EscomledML
    ADD . /EscomledML
    ADD ./MLScripts/lib EscomledML/lib
    ADD ./MLScripts/config EscomledML/config
    ADD ./MLScripts/config EscomledML/home/escomled/escomled_server/config
    ADD ./MLScripts EscomledML/MLScripts
    

    脚本不会真正正确地将其作为目标,因为它期望在其他地方使用它:
    LIB=/home/escomled/escomled_server/lib
    CONFIG=/home/escomled/escomled_server/config
    

    检查所有文件位置,以确认它们已正确放置在应有的位置。
  • 守护程序应作为主要进程在前台启动。由于您首先遇到启动过程中的问题,因此在将其设置为Dockerfile的入口点之前,请尝试使用/ bin / bash交互地启动容器并正确启动启动脚本。
  • 您正在尝试从一个操作系统迁移到另一个操作系统。安装细节和环境差异可能是您的应用无法正常启动的原因。
  • 您可以直接在docker中使用build args和env变量,以避免在脚本中对其进行初始化。确保所有环境变量都已正确初始化

  • 评论后编辑:

    您还遇到了multistage build问题。您没有转移到上一个阶段的 Artifact ,而是有效地将其丢弃。这就是为什么上一阶段之后没有任何文件夹的原因。您需要使用COPY --from=0 ...的效果并检查您想要的结果,因为您可能在这里滥用了多阶段构建(主要目的是在上一层作为一次性构建阶段构建某些东西,而不是将两个图像组合为一个)。

    在下一条评论后编辑:

    我的看法是,您使用ubuntu镜像的唯一一件事就是安装 super 用户。如果是这种情况,则只需替换以下几行:
    FROM ubuntu:14.04
    RUN apt-get update && apt-get install -y supervisor
    

    与:
    apk add --update supervisor
    

    将以 Alpine 镜像安装supervisor,您将可以正常使用。

    请注意,您的目录结构看起来很混乱(您先添加.,然后再添加子文件夹等),因此请确保查看这些内容。我不知道您想要的目录结构是什么,但是您应该能够在那里建立头或尾...

    关于bash - sh脚本在docker容器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51649232/

    相关文章:

    docker - 在 dockerfile 上使用 COPY 进行 apache 构建

    linux - Nginx init.d 脚本

    bash - 为什么在 crontab 中调用时使用 set -e 会导致我的脚本失败?

    bash - 获取特定字符串

    bash - 如何在bash脚本中获取不同用户的$HOME目录?

    docker - 在同一个Docker容器中部署单片和微服务

    docker - 如何在开发环境和生产环境中使用docker?

    bash - rm 命令在 shell 内部不起作用

    docker - 在 Centos7 机器上安装 docker 特定版本

    Docker 与 Vagrant