Docker容器中的Alpine linux忽略shell脚本参数

时间:2016-08-12 20:33:39

标签: shell docker sh alpine

我正在尝试创建一个设置自定义tomcat端口的docker镜像(我知道你可以设置一个带有docker flag的外部端口" -p 8888:8080"但对于我的用例我也想改变内部端口。)

当我尝试启动catalina.sh时,由于某种原因,run参数被忽略。

Dockerfile:

# Tomcat 8 alpine dockerfile copied here (URL below)... minus the CMD line at the end
# https://github.com/docker-library/tomcat/blob/5f1abae99c0b1ebbd4f020bc4b5696619d948cfd/8.0/jre8-alpine/Dockerfile

ADD server.xml $CATALINA_HOME/conf/server.xml
ADD start-tomcat.sh /start-tomcat.sh
RUN chmod +x /start-tomcat.sh
ENTRYPOINT ["/bin/sh","/start-tomcat.sh"]

除了行:

之外,tomcat文件server.xml与默认文件相同
<Connector port="${port.http.nonssl}" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

start-tomcat.sh:

#!/bin/sh
export JAVA_OPTS=-Dport.http.nonssl=${PORT}
catalina.sh run

图像构建成功,但是当我使用

运行时
docker run -p 8888:8888 -e PORT=8888 customtomcat

我只是得到一个catalina.sh命令列表,好像我没有给它一个参数。我也试过了

/usr/local/tomcat/bin/catalina.sh run

sh -c "catalina.sh run"

sh -c "/usr/local/tomcat/bin/catalina.sh run"

cd /usr/local/tomcat/bin
./catalina.sh run

我很确定我在这里遗漏了一些简单的东西。我猜它与语法有关,但也许它与我不知道的docker或alpine有关。这是我第一次使用alpine linux。

---编辑1 ---

解释我的用例...我在创建docker镜像后设置PORT,因为它是由apache mesos任务设置的。为了我的目的,我需要在主机模式下运行docker容器(来自marathon),而不是桥接模式。

---编辑2 ---

我修改过的东西只关注我的主要问题。 docker文件现在只在末尾附加以下内容:

ADD start-tomcat.sh /start-tomcat.sh
RUN chmod +x /start-tomcat.sh
ENTRYPOINT ["/bin/sh","/start-tomcat.sh"]

并且start-tomcat.sh:

#!/bin/bash
catalina.sh run

仍然没有运气。

1 个答案:

答案 0 :(得分:2)

更新:如果“catalina.sh run”因无效选项而失败,请先检查Windows系统中的换行符。在Linux环境中读取shell脚本时,它们会导致错误。

看看catalina.sh,我相信你想要CATALINA_OPTS,而不是JAVA_OPTS:

# Control Script for the CATALINA Server
#
# Environment Variable Prerequisites
#
#   Do not set the variables in this script. Instead put them into a script
#   setenv.sh in CATALINA_BASE/bin to keep your customizations separate.
#
#   CATALINA_HOME   May point at your Catalina "build" directory.
#
#   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
#                   of a Catalina installation.  If not present, resolves to
#                   the same directory that CATALINA_HOME points to.
#
#   CATALINA_OUT    (Optional) Full path to a file where stdout and stderr
#                   will be redirected.
#                   Default is $CATALINA_BASE/logs/catalina.out
#
#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   "run" or "debug" command is executed.
#                   Include here and not in JAVA_OPTS all options, that should
#                   only be used by Tomcat itself, not by the stop process,
#                   the version command etc.
#                   Examples are heap size, GC logging, JMX ports etc.
#
#   CATALINA_TMPDIR (Optional) Directory path location of temporary directory
#                   the JVM should use (java.io.tmpdir).  Defaults to
#                   $CATALINA_BASE/temp.
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.
#
#   JRE_HOME        Must point at your Java Runtime installation.
#                   Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
#                   are both set, JRE_HOME is used.
#
#   JAVA_OPTS       (Optional) Java runtime options used when any command
#                   is executed.
#                   Include here and not in CATALINA_OPTS all options, that
#                   should be used by Tomcat and also by the stop process,
#                   the version command etc.
#                   Most options should go into CATALINA_OPTS.