Невозможно выполнить вложенную команду на удаленном хосте через туннель SSH.
Я запускаю следующую команду в своем задании GitLab CI:
ssh ${REMOTE_HOST} "docker restart $(docker ps --format '{{.Names}}' | grep '^backend')"
Проблема в том, что он возвращает мне следующую ошибку:
/usr/bin/bash: line 156: docker: command not found
"docker restart" requires at least 1 argument.
Я знаю, что он существует и работает на удаленном хосте, потому что я могу войти в оболочку хоста и самостоятельно выполнять команды Docker.
Насколько я понимаю, ошибка кажется двойной: она сообщает мне, что «команда Docker не найдена», а затем сообщает мне, что «перезапуск Docker требует как минимум 1 аргумент».
Итак, я предполагаю, что исполняемый файл не найден для вложенной команды, которая возвращает ошибку «docker: команда не найдена», и поскольку она не возвращает имена контейнеров, тоdocker restart
также терпит неудачу.
Я также попробовал заменить на/usr/bin/docker
внутри вложенной команды, но безрезультатно.
Я знаю, что туннель ssh работает правильно, потому что непосредственно перед этой командой я выполняю следующие две команды, которые работают нормально:
ssh ${REMOTE_HOST} "docker pull my_registry/backend:${VERSION} "
ssh ${REMOTE_HOST} "docker-compose -f docker-compose.yml up --detach --remove-orphans"
Итак, я действительно считаю, что проблема в том, чтоdocker
для внутренней команды не найден исполняемый файл.