Расширение 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 команда должна работать без изменений.

Другие вопросы по тегам