Как подключиться напрямую к удаленному док-контейнеру с помощью ssh - PullRequest
0 голосов
/ 19 сентября 2018

Я хочу подключиться к удаленно работающему Docker-контейнеру напрямую через ssh.Обычно я могу

$ ssh -i privateKey user@host
$ docker ps #which will list all running containers
$ docker exec -it ***** bash deploy.sh # ***** is container id and this line run a deployment script 

Но мне нужно запустить этот скрипт из конвейера Jenkins, где у меня есть только один шанс.После многих попыток я придумываю это

$ ssh -tt -i ~/privateKey user@host docker exec -it $(docker ps | grep  unique_text | cut -c1-10) /bin/bash deploy.sh

, которое не помогло моему положению, потому что оно возвращает

"docker exec" requires at least 2 arguments.

Что на самом деле означает, что команда здесь усечена $(docker ps | grep ...

Мое решение

sh 'ssh -tt -i $FILE -o StrictHostKeyChecking=no $USER@$HOST /bin/bash -c \'"docker exec -it $(docker ps | grep unique_text | cut -c1-10) bash start.sh"\''

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Лучшее решение этой проблемы - создать узел в Jenkins

Шаг 1. Перейдите в раздел «Управление Jenkins» и прокрутите вниз до раздела «Управление узлами».

Manage Jenkins

Шаг 2 - Нажмите на новый узел New Nodes

Шаг 3 - Дайте имя для узла, выберите опцию Dumb slave инажмите на ОК.Dumb Slave

Шаг 4 - Введите сведения о подчиненном узле машины.В приведенном ниже примере мы рассматриваем подчиненную машину как машину с Windows, поэтому в качестве метода запуска была выбрана опция «Разрешить Jenkins управлять этим подчиненным Windows как службой Windows».Нам также необходимо добавить необходимые данные о подчиненном узле, такие как имя узла и учетные данные для входа в систему для узла.Нажмите кнопку Сохранить.Метки, для которых имя вводится как «New_Slave», - это то, что можно использовать для настройки заданий для использования этого ведомого компьютера.

Slave Machine1

После того, как указано вышешаги завершены, новый узловой компьютер будет первоначально в автономном состоянии, но перейдет в оперативный режим, если все настройки на предыдущем экране были введены правильно.При необходимости можно в любое время сделать подчиненную машину узла отключенной.Slave Machine2

В моем трубопроводе Дженкинса

node("build_slave"){
    sh 'docker exec -it $(docker ps | grep unique_text | cut -c1-10) bash deploy.sh'
}
0 голосов
/ 19 сентября 2018
$ ssh -tt -i ~/privateKey user@host docker exec -it $(docker ps | grep  unique_text | cut -c1-10) /bin/bash deploy.sh

Это запустит вложенную оболочку с командой docker ps на вашем локальном компьютере, а не на удаленном.Вы захотите обработать эту полную команду в оболочке на удаленном сервере:

$ ssh -tt -i ~/privateKey user@host /bin/sh -c "docker exec -it $(docker ps | grep  unique_text | cut -c1-10) /bin/bash deploy.sh"
...