Ssh из одного контейнера в другой контейнер - PullRequest
0 голосов
/ 31 декабря 2018

Я хочу создать сеть контейнера, в которой один центральный контейнер должен иметь возможность подключаться по ssh ко всем другим контейнерам.Через центральный контейнер ssh можно изменить конфигурацию всего остального контейнера с помощью Ansible.Я знаю, что не рекомендуется использовать ssh из одного контейнера в другой, и мы можем использовать объем для обмена данными, но это не подходит для моего варианта использования.Я в состоянии выполнить ssh с хоста на контейнер, но не могу выполнить ssh из одного контейнера в другой.

Используемый файл Docker:

FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y netcat ssh iputils-ping
EXPOSE 22

Образ, созданный в Dockerfile, называется ubuntu: v2

Затем, используя приведенные ниже команды, я создал два контейнера u1 и u2

docker run -p 22 --rm -ti --name u1 ubuntu:v2 bash 
docker run -p 22 --rm -ti --name u2 ubuntu:v2 bash

В контейнере я запускаю команды ниже, чтобы создать пользователя в контейнере.Создайте пользователя u1 в контейнере u1 и u2 в контейнере u2

root@d0b0e44f7517:/# mkdir /var/run/sshd
root@d0b0e44f7517:/# chmod 0755 /var/run/sshd
root@d0b0e44f7517:/# /usr/sbin/sshd    
root@d0b0e44f7517:/#
root@d0b0e44f7517:/# useradd --create-home --shell /bin/bash --groups sudo u2  
root@d0b0e44f7517:/# passwd u2
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@d0b0e44f7517:/#
root@d0b0e44f7517:/#

Я создал два контейнера, оба одинаковые, за исключением того, что у одного есть пользователь u1, а у другого - пользователь u2, как показано выше.После этого я попытался выполнить ssh с хоста на контейнер с помощью команды ssh -X u2 @ localhost -p 32773 (32773 - это порт, который сопоставлен с 22 портом контейнера).Таким образом, ssh работает от хоста к контейнеру, но я не могу ssh из одного контейнера в другой контейнер. Так что вы можете помочь мне ssh из одного контейнера в другие контейнеры?

1 Ответ

0 голосов
/ 31 декабря 2018

Используйте обнаружение службы Docker, а затем вы можете ssh из одного контейнера в другой контейнер.Здесь вы можете обнаружить сервис, подключив все контейнеры к одной сети.

docker network create -d bridge test
docker run -p 22 --rm -ti --name u1 --network test ubuntu:v2 bash 
docker run -p 22 --rm -ti --name u2 --network test ubuntu:v2 bash

Теперь из u1 вы можете ввести ssh в u2 как ssh user@u2.

...