Ssh из одного контейнера в другой контейнер

Я хочу создать сеть контейнера, в которой один центральный контейнер должен быть в состоянии 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

Образ, созданный в Docker file, называется 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 из одного контейнера в другие контейнеры?

2 ответа

Решение

Используйте обнаружение службы 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,

Войти в docker conatiner

      docker exec -it u1 /bin/bash
docker exec -it u2 /bin/bash

После входа в систему conatiner выполните следующие команды, чтобы установить необходимые инструменты для sshing.

      passwd          #Change the password of container it will be asked during ssh

apt-get update

apt-get install vim 

apt-get install openssh-client openssh-server

vi /etc/ssh/sshd_config 

Меняем строчку "PermitRootLogin yes"

service ssh restart

Теперь вы можете использовать ssh root@container_ip в любую тару

Примечание: чтобы получить IP-адрес контейнера, вы можете выполнить следующую команду

      docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <conatiner_name>
Другие вопросы по тегам