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>