我想创建一个容器网络,其中一个中央容器应该可以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吗?
答案 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 exec -it u1 /bin/bash
docker exec -it u2 /bin/bash
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
service ssh restart
现在您可以使用 root@container_ip
ssh 到任何容器
注意:要获取容器ip,您可以运行以下命令
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <conatiner_name>