【问题标题】:How can I connect to a Docker image via SSH from another docker image?如何通过 SSH 从另一个 Docker 映像连接到 Docker 映像?
【发布时间】:2019-02-09 01:03:26
【问题描述】:

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

我对 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 问题的链接,但我不知道我的问题是否与此有关。

有没有简单的方法可以做到这一点?还是我做错了什么?

提前谢谢你

【问题讨论】:

  • 我不知道究竟什么是 Ansible。但是将 SSH 连接到容器中的想法似乎并不合法!您可以尝试使用标志-it 附加到您的泊坞窗。从您的主机尝试docker exec -it container_name。或者,如果您希望两者都可以访问(共享数据),请使用存储解决方案,例如卷。
  • 我知道 Docker 基础知识,但我完全迷失了 Ansible,而且似乎我遇到了最糟糕的入门教程
  • 查看这里:dockermastery.slack.com 他们可能会解决你的问题...

标签: docker ssh ansible


【解决方案1】:

您正在设计的架构与 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 如何启动它。

【讨论】:

  • 我想你是对的,我想我只是因为我必须使用 Windows 而迷路了。现在我带着一个不错的旧 Ubuntu 回家了,我将从零开始
【解决方案2】:

你有开放的 ssh 服务器吗?

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

对于ansible

- 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

【讨论】:

    【解决方案3】:

    我终于做到了!

    您可以使用 docker-compose 的链接。 Aaaand 你需要安装 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"
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 2021-11-04
      • 2020-07-20
      相关资源
      最近更新 更多