docker 容器中的 Alpine linux 忽略 shell 脚本参数
Alpine linux in docker container ignoring shell script arguments
我正在尝试创建一个设置自定义 tomcat 端口的 docker 图像(我知道您可以使用 docker 标志“-p 8888:8080" 但对于我的用例,我也想更改内部端口)。
当我尝试启动 catalina.sh 时,运行 参数由于某种原因被忽略。
Docker 文件:
# 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" />
开始-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 linux.
---编辑1---
为了解释我的用例...我在创建 docker 图像后设置端口,因为它是由 apache mesos 任务设置的。出于我的目的,我需要在主机模式下 运行 docker 容器(来自马拉松),而不是桥接模式。
---编辑2---
我修改了内容以仅关注我的主要问题。 docker 文件现在仅在末尾附加了以下内容:
ADD start-tomcat.sh /start-tomcat.sh
RUN chmod +x /start-tomcat.sh
ENTRYPOINT ["/bin/sh","/start-tomcat.sh"]
然后开始-tomcat.sh:
#!/bin/bash
catalina.sh run
仍然没有运气。
更新:如果 "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.
我正在尝试创建一个设置自定义 tomcat 端口的 docker 图像(我知道您可以使用 docker 标志“-p 8888:8080" 但对于我的用例,我也想更改内部端口)。
当我尝试启动 catalina.sh 时,运行 参数由于某种原因被忽略。
Docker 文件:
# 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" />
开始-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 linux.
---编辑1---
为了解释我的用例...我在创建 docker 图像后设置端口,因为它是由 apache mesos 任务设置的。出于我的目的,我需要在主机模式下 运行 docker 容器(来自马拉松),而不是桥接模式。
---编辑2---
我修改了内容以仅关注我的主要问题。 docker 文件现在仅在末尾附加了以下内容:
ADD start-tomcat.sh /start-tomcat.sh
RUN chmod +x /start-tomcat.sh
ENTRYPOINT ["/bin/sh","/start-tomcat.sh"]
然后开始-tomcat.sh:
#!/bin/bash
catalina.sh run
仍然没有运气。
更新:如果 "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.