从一个容器到另一个容器的SSH

时间:2018-12-31 06:24:47

标签: docker ssh containers docker-networking docker-network

我想创建一个容器网络,其中一个中央容器应该可以ssh放入所有其他容器中。通过ssh,中央容器可以使用Ansible更改所有其他容器的配置。我知道不建议您从一个容器切换到另一个容器,并且我们可以使用卷进行数据共享,但这不适合我的用例。我可以从主机SSH到容器,但不能从一个容器SSH到另一个。

我正在使用的Docker文件是:

ArrayList<Model> list = new ArrayList<>();
for (ProductModel hold : productAdapter.getAllData()) {
    int total = Integer.parseInt(hold.getProduct_price())*(hold.getCountProduct());
    if (hold.isCheckbox()) {
        Model model = new Model();
        model.productName = hold.getProduct_name();
        model.total = total;

        list.add(model);
    }
}
String jsonArray = Gson().toJson(list);

由Dockerfile创建的映像名为ubuntu:v2

然后使用以下命令创建了两个容器u1和u2

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

在容器中,我正在运行以下命令以在容器中创建用户。在u1容器中创建用户u1,在u2容器中创建用户u2

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

我制作了两个容器,除了一个容器具有用户u1,另一个容器具有用户u2之外,其余两个容器均相同,如上所述。之后,我尝试使用命令 ssh -X u2 @ localhost -p 32773 (从32773是映射到容器的22端口的端口)从主机到容器ssh。 ssh可以在主机到容器之间工作,但是我不能从一个容器到另一个容器ssh。那么您能帮我从一个容器到另一个容器ssh吗?

2 个答案:

答案 0 :(得分:1)

使用docker服务发现,然后可以从一个容器ssh到另一个容器。在这里,您可以通过将所有容器连接到同一网络来实现服务发现。

a.A

现在从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一样进入u2

答案 1 :(得分:0)

登录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

现在您可以使用 root@container_ip ssh 到任何容器

注意:要获取容器ip,您可以运行以下命令

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <conatiner_name>