如何通过SSH从另一个Docker映像连接到Docker映像?

时间:2019-02-08 15:06:10

标签: docker ssh ansible

免责声明:这可能是一个菜鸟问题。如果是这样,我深表歉意,这根本不是我的目标。

我真的是Ansible的新手,但是即使Ansible尚未(不是)这个问题,我的配置还是有问题。 TL; DR:我别无选择,只能根据自己的情况使用Windows。

但是,我能够使用Docker。我编写了以下Dockerfile使其可以运行:

FROM php:7.3.1-apache-stretch

RUN apt-get update && apt-get install -y python3 python3-pip git nano
RUN pip3 install ansible
RUN mkdir /home/devops
WORKDIR /home/devops

然后我编写了以下docker-compose.yml文件,使其具有Ansible专用服务器和“从属”。

version: '3.5'

services:
  ansible:
    build: .
    ports:
      - "80:80"

  slave:
    build: .
    ports:
      - "81:80"
      - "22:22"

this tutorial之后(法文),他们说我需要使用SSH从“ Ansible”服务器登录到从属服务器。但是,即使将我的id_rsa.pub文件放入“从站”文件中,我也无法连接到它。基本上,它将返回以下内容:

  

连接到主机172.19.0.2端口22:连接被拒绝

172.19.0.2是我运行ifconfig时显示给我的端口。

所以我真的不知道我应该在这里做什么。在问到这里之前,我已经在线查看了一些有关Docker的ssh问题的链接,但是我不知道我的问题是否与此有关。

是否有一种简单的方法?还是我做错了什么?

提前谢谢

3 个答案:

答案 0 :(得分:2)

您正在设计的架构与Ansible或Docker的工作方式根本不匹配。

Ansible没有客户端/服务器体系结构:您不需要安装“主Ansible服务器”容器,只需要某种方法即可连接到要使用ssh管理的主机。

Docker容器很少运行ssh守护程序。它们通常是单个服务器的包装。容器可以运行,例如,Apache服务器,而绝对不能运行。这使他们难以使用Ansible进行管理。

我建议直接在主机上安装Ansible,可能打包在Python虚拟环境中。 (这解决了与容器共享ssh密钥等凭据的棘手问题,这意味着您仅需要root权限即可运行该工具。)对于管理Docker容器,建议阅读the docker build system to build custom Docker images;这通常需要使用Dockerfile的六行来安装服务并告诉Docker如何启动它。

答案 1 :(得分:1)

您有开放的ssh服务器吗?

sudo apt-get update
sudo apt-get install openssh-server
sudo ufw allow 22

可笑

- name: 2.Install Open ssh
  apt: name=openssh-server

- name: 8.Update firewall
  become: true
  command: ufw allow from any to any port 22 proto tcp

答案 2 :(得分:1)

我终于做到了!

您可以使用docker-compose的链接。 Aaa,您需要安装openssh-server并将其打开。

所以

您的Dockerfile应该像

FROM php:7.3.1-apache-stretch

RUN apt-get update && apt-get install -y python3 python3-pip git nano openssh-server
RUN pip3 install ansible
RUN mkdir /home/devops
RUN service ssh start
WORKDIR /home/devops

和您的docker-compose应该像这样:

version: '3.5'

services:
  ansible:
    build: .
    links:
      - slave:slave
    ports:
      - "80:80"

  slave:
    build: .
    ports:
      - "81:80"
      - "22:22"

因此,您只需要将id-rsa挂载在ansible中并将id-rsa.pub挂载在slave中。

version: '3.5'

services:
  ansible:
    build: .
    links:
      - slave:slave
    volumes:
      - /path/to/your/id-rsa:/home/root/.ssh/id-rsa
    ports:
      - "80:80"

  slave:
    build: .
    volumes:
      - /path/to/your/id-rsa.pub:/home/root/.ssh/id-rsa.pub
    ports:
      - "81:80"
      - "22:22"

希望有帮助。