На моем хосте OS X я использую Docker CE (18.06.1-ce-mac73 (26764)) с включенным Kubernetes и использую оркестровку Kubernetes.С этого хоста я могу запустить развертывание стека для развертывания контейнера в Kubernetes с помощью этого простого файла docker-compose (kube-compose.yml):
version: '3.3'
services:
web:
image: dockerdemos/lab-web
volumes:
- "./web/static:/static"
ports:
- "9999:80"
, и эта командная строка запускается из каталога, содержащегофайл compose:
docker stack deploy --compose-file ./kube-compose.yml simple_test
Однако, когда я пытаюсь запустить ту же команду из моего контейнера Jenkins, Jenkins возвращает:
этот узел не является администратором роя.Используйте «docker swarm init» или «docker swarm join» для подключения этого узла к рою и повторите попытку
Я не хочу, чтобы docker-клиент в контейнере Jenkins был инициализирован для роя, так как я 'Я не использую Docker Swarm на хосте.
Контейнер Jenkins определен в docker-compose для включения монтирования тома в конечную точку сокета хоста докера:
version: '3.3'
services:
jenkins:
# contains embedded docker client & blueocean plugin
image: jenkinsci/blueocean:latest
user: root
ports:
- "8080:8080"
- "50000:50000"
volumes:
- ./jenkins_home:/var/jenkins_home
# run Docker from the host system when the container calls it.
- /var/run/docker.sock:/var/run/docker.sock
# root of simple project
- .:/home/project
container_name: jenkins
Я также следовал этому руководству для запросов прокси к хосту докерас socat: https://github.com/docker/for-mac/issues/770 и здесь: Docker-compose: развертывание службы на нескольких хостах .
Наконец, я использую следующее определение Jenkins (Jenkinsfile) для вызова стека для развертывания на моем хосте.В Jenkins установлен подключаемый модуль док-станции Jenkins:
node {
checkout scm
stage ('Deploy To Kube') {
docker.withServer('tcp://docker.for.mac.localhost:1234') {
sh 'docker stack deploy app --compose-file /home/project/kube-compose.yml'
}
}
}
Я также попытался изменить подпись withServer на:
docker.withServer('unix:///var/run/docker.sock')
, и я получил такой же ответ об ошибке.Тем не менее, я могу подключиться к хосту докера из контейнера Jenkins, поэтому я знаю, что он доступен.Кроме того, как я упоминал ранее, я знаю, что в сообщении говорится, что нужно запустить swarm init, но я не развертываю для роения.
Я проверил версию Docker-клиента в контейнере Jenkins, и это та же версия (однако вариант Linux), которую я использую на своем хосте:
Версия Docker18.06.1-ce, сборка d72f525745
Вот код, который я описал: https://github.com/ewilansky/localstackdeploy.git
Пожалуйста, дайте мне знать, если возможно сделать то, что я надеюсь сделатьиз контейнера Дженкинс.Цель всего этого - предоставить простую портативную демонстрацию конвейера, и развертывание в Kubernetes - последний шаг.Я понимаю, что это не тот подход, который использовался бы вне локальной среды разработки.