Alpine linux в контейнере докеров игнорирует аргументы сценария оболочки

Я пытаюсь создать образ докера, который устанавливает собственный порт tomcat (я знаю, что вы можете установить внешний порт с помощью флага докера «-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

Я почти уверен, что мне здесь не хватает чего-то простого. Я предполагаю, что это как-то связано с синтаксисом, но, возможно, это как-то связано с докером или alpine, о которых я не знаю. Я впервые использую alpine linux.

--- Редактировать 1 ---

Чтобы объяснить мой вариант использования ... Я устанавливаю ПОРТ после создания образа докера, потому что он задается задачей apache mesos. Для моих целей мне нужно запустить контейнер докеров (из марафона) в режиме хоста, а не в режиме моста.

--- Редактировать 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

По-прежнему не повезло.


person Sean Nelson    schedule 12.08.2016    source источник


Ответы (1)


Обновление: для сбоя "catalina.sh run" с недопустимой опцией сначала проверьте перевод строки из системы Windows. Они вызовут ошибки при чтении сценария оболочки в среде Linux.


Глядя на 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.
person BMitch    schedule 12.08.2016
comment
Я вижу, как это может что-то исправить в будущем, но проблема все еще существует, даже когда я вообще не утруждаюсь настройкой OPTS (см. Правку 2). - person Sean Nelson; 13.08.2016
comment
Вы изменяете этот start-tomcat.sh на машине с Windows? Первое предположение - это перевод строки в файле Windows. Кроме того, было бы полезно увидеть строку FROM, которую вы используете в своем Dockerfile, чтобы сузить, какую версию catalina.sh вы используете, или включить этот файл, если вы внесли изменения. - person BMitch; 13.08.2016
comment
Исходная версия файла была создана в windows. Я совсем забыл об этом, потому что редактировал файл в nano. Это исправило это. Я могу отметить это как правильный ответ, если вы не хотите дать другой ответ. - person Sean Nelson; 13.08.2016
comment
Я отредактирую этот комментарий, чтобы вы могли его принять. - person BMitch; 13.08.2016