Расширение Bash Brace не работает с командой Dockerfile RUN
Я выполняю следующую команду RUN в моем Dockerfile, ожидая, что каталог "logs" будет создан в каждом из перечисленных подкаталогов:
RUN mkdir -p /opt/seagull/{diameter-env,h248-env,http-env,msrp-env,octcap-env,radius-env,sip-env,synchro-env,xcap-env}/logs
Но когда я проверяю изображение, я вижу каталог, буквально называемый "{Diameter-env,h248-env,http-env,msrp-env,octcap-env,radius-env,sip-env,synchro-env,xcap-env}"создан в /opt/seagull, вместо того, чтобы иметь место расширение скобок.
Что я могу делать не так?
1 ответ
Вы не используете расширение скобок, потому что вы не используете Bash. Если вы посмотрите документацию для команды RUN:
RUN (форма оболочки, команда запускается в оболочке, которая по умолчанию является /bin/sh -c в Linux или cmd /S /C в Windows)
А также:
Примечание. Чтобы использовать другую оболочку, отличную от '/ bin / sh', используйте форму exec, передающую нужную оболочку. Например, RUN ["/bin/bash", "-c", "echo hello"]
Итак, просто измените команду на использование формы exec и явно используйте оболочку Bash:
RUN [ "/bin/bash", "-c", "mkdir -p /opt/seagull/{diameter-env,h248-env,http-env,msrp-env,octcap-env,radius-env,sip-env,synchro-env,xcap-env}/logs" ]
Если
/bin/bash
доступен в вашем образе, вы можете изменить оболочку, которую система сборки докеров использует для выполнения вашего
RUN
команду, например:
SHELL ["/bin/bash", "-c"]
Теперь твой
RUN
команда должна работать без изменений.