Ваш сценарий написан для bash
, но вы запускаете его с /bin/sh
, который на изображении node:14.0.0
равен , а не ссылкой на bash
. Это традиционная оболочка POSIX.
Синтаксис ${!varname}
, в частности, представляет собой bash -ism:
value=$(printf '%s\n' "${!varname}")
Самый простой способ решить эту проблему - запустить скрипт с :
#!/bin/bash
Или просто измените свою последнюю строку RUN
, чтобы она выглядела так:
RUN bash /usr/share/caddy/html/env.sh
Вот мой тест. Если я начну с env.sh
, который выглядит следующим образом:
#!/bin/sh
foo=1
varname=foo
echo "foo is ${!varname}"
И это Dockerfile
:
FROM node:14.0.0
COPY env.sh /tmp/env.sh
RUN chmod +x /tmp/env.sh; /tmp/env.sh
Сбой, как и ожидалось, с:
/tmp/env.sh: 5: /tmp/env.sh: Bad substitution
Но если я изменю Dockerfile
, чтобы он выглядел так:
FROM node:14.0.0
COPY env.sh /tmp/env.sh
RUN bash /tmp/env.sh
Он работает как нужно.