Мне нужно обновить переменную JAVA_ARGS
, прежде чем отправить ее в команду java -server
.
Когда пользователь вызывает ./script/server -d
, я хочу добавить аргументы отладки.Вот соответствующая часть моего ./script/server
:
for i in "$@"
do
case $i in
-d|--debug)
DEBUG_ARGS="--build-arg DEBUG_MODE=true"
shift
;;
-h|--help)
display_usage
exit
;;
*)
echo "Unknown option"
exit 1
;;
esac
done
docker-compose build ${DEBUG_ARGS} app
docker-compose up
Вот фрагмент из моего docker-compose.yml
services:
app:
environment:
...
JAVA_ARGS: -Xms2048m -Xmx3072m
JAVA_ARGS_DEBUG: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5080
Это похоже на работу, и я думаю, что мой dockerfile
правильно определить переменную DEBUG_MODE=true
.Вот мой dockerfile
: (некоторые вещи удалены)
FROM openjdk:8-alpine
ARG DEBUG_MODE=false
ENV DEBUG_MODE ${DEBUG_MODE}
ARG JAVA_ARGS=
ENV JAVA_ARGS ${JAVA_ARGS}
RUN if [ $DEBUG_MODE == "true" ]; \
then echo "Debug mode on."; JAVA_ARGS=$JAVA_ARGS $JAVA_ARGS_DEBUG; \
else echo "Debug mode off."; \
fi;
RUN echo "Echoing JAVA_ARGS: "; \
echo "${JAVA_ARGS}";
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD java -server ${JAVA_ARGS} -jar /app/app.jar
Я правильно вижу Debug mode on.
вывод на консоль.
Но тогда echo "${JAVA_ARGS}";
пусто.И действительно, когда дело доходит до последней строки, аргументы не передаются команде java
, и отладка не включена.
Мой bash довольно шаток, знаете, почему я нев состоянии обновить и использовать эту переменную в последней команде?