Как я могу подключиться к образу Docker через SSH из другого образа Docker? - PullRequest
0 голосов
/ 08 февраля 2019

Отказ от ответственности: это может быть вопрос нуб.Если так, то я извиняюсь, это вообще не моя цель.

Я действительно новичок в Ansible, но хотя Ansible (пока) не проблема, у меня проблема с моей собственной конфигурацией,TL; DR: У меня нет выбора, кроме как использовать Windows в моей ситуации.

Однако я могу использовать Docker.Я написал следующий Dockerfile для работы с:

FROM php:7.3.1-apache-stretch

RUN apt-get update && apt-get install -y python3 python3-pip git nano
RUN pip3 install ansible
RUN mkdir /home/devops
WORKDIR /home/devops

и написал следующий файл docker-compose.yml, чтобы иметь выделенный сервер Ansible и «ведомый».

version: '3.5'

services:
  ansible:
    build: .
    ports:
      - "80:80"

  slave:
    build: .
    ports:
      - "81:80"
      - "22:22"

После этого урока (на французском) они говорят, что мне нужно войти через SSH на подчиненный сервер с "Ansible" сервера.Однако даже после помещения моего id_rsa.pub файла в «ведомый» я не могу подключиться к нему.По сути, он возвращает следующее:

подключение к хосту 172.19.0.2 порт 22: соединение отклонено

172.19.0.2 - это порт, который отображается для меня при запуске ifconfig.

Так что я действительно не знаю, что мне здесь делать.Я видел несколько ссылок о проблемах ssh с Docker онлайн, прежде чем спросить здесь, но я не знаю, связана ли моя проблема с этим.

Есть ли простой способ сделать это?Или я все делаю не так?

Заранее спасибо

Ответы [ 3 ]

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

Архитектура, которую вы разрабатываете, не совсем соответствует тому, как работает Ansible или Docker.

Ansible не имеет клиент-серверной архитектуры: вам не нужно устанавливать «главный сервер Ansible»"Контейнер, вам просто нужно каким-то образом подключиться к хосту, которым вы пытаетесь управлять, используя ssh.

Контейнеры Docker редко запускают демоны ssh.Обычно они представляют собой упаковку одного сервера.Контейнер может запускать, скажем, сервер Apache и абсолютно ничего другого.Это затрудняет управление ими с помощью Ansible.

Я бы предложил установить Ansible непосредственно на ваш хост, возможно, упакованный в виртуальную среду Python.(Это позволяет обойти сложные проблемы с совместным использованием учетных данных, таких как ключи ssh, с контейнером, и это означает, что вам не нужны права root только для запуска инструмента.) Для управления контейнерами Docker я бы порекомендовал прочитать на docker build система для создания пользовательских образов Docker ;Обычно для установки службы требуется указать полдюжины строк Dockerfile и сообщить Docker, как ее запустить.

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

Я наконец сделал это!

Вы можете использовать ссылку docker-compose.Ааа, и вам нужно установить openssh-сервер и включить его.

Итак,

ваш Dockerfile должен быть похож на

FROM php:7.3.1-apache-stretch

RUN apt-get update && apt-get install -y python3 python3-pip git nano openssh-server
RUN pip3 install ansible
RUN mkdir /home/devops
RUN service ssh start
WORKDIR /home/devops

, а ваш docker-compose должен выглядеть так:

version: '3.5'

services:
  ansible:
    build: .
    links:
      - slave:slave
    ports:
      - "80:80"

  slave:
    build: .
    ports:
      - "81:80"
      - "22:22"

Итак, вам нужно только смонтировать как том ваш id-rsa в ansible и id-rsa.pub в slave.

version: '3.5'

services:
  ansible:
    build: .
    links:
      - slave:slave
    volumes:
      - /path/to/your/id-rsa:/home/root/.ssh/id-rsa
    ports:
      - "80:80"

  slave:
    build: .
    volumes:
      - /path/to/your/id-rsa.pub:/home/root/.ssh/id-rsa.pub
    ports:
      - "81:80"
      - "22:22"

Надеюсь, это поможет.

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

Есть ли у вас открытый ssh ​​сервер?

sudo apt-get update
sudo apt-get install openssh-server
sudo ufw allow 22

Для ansible

- name: 2.Install Open ssh
  apt: name=openssh-server

- name: 8.Update firewall
  become: true
  command: ufw allow from any to any port 22 proto tcp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...