【问题标题】:cannot ssh Docker Provided Container with Vagrant. Vagrant ssh doesnt work too无法使用 Vagrant SSH Docker 提供的容器。 Vagrant ssh 也不起作用
【发布时间】:2015-02-28 02:35:06
【问题描述】:

我对 Vagrant 和 Docker 都很陌生。 我在这里尝试做的是在 Vagrant 中通过 docker 提供一个容器,并使用 shell 配置器安装一个小型 webapp。

这是我的 Vagrantfile

Vagrant.configure(2) do |config|

# config.vm.provision :shell, path: "bootstrap.sh"
config.vm.provision :shell, inline: 'echo Hi there !!!'

   config.vm.provider :docker do |d|
     d.name="appEnvironment"
     d.image = "phusion/baseimage"
     d.remains_running = true
     d.has_ssh = true
     d.cmd = ["/sbin/my_init","--enable-insecure-key"]
   end
end

我在这里面临的问题是,在创建容器后,它会继续运行以下内容并最终停止。 当我输入 docker ps 时,我可以看到一个正在运行的 docker 容器,但它没有运行配置部分。我假设这是因为 ssh 没有成功

==> default: Creating the container...
    default:   Name: appEnvironment
    default:  Image: phusion/baseimage
    default:    Cmd: /sbin/my_init --enable-insecure-key
    default: Volume: /home/devops/vagrantBoxForDemo:/vagrant
    default:   Port: 127.0.0.1:2222:22
    default:  
    default: Container created: 56a87b7cd10c22fe
==> default: Starting container...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 172.17.0.50:22
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection refused. Retrying...
    default: Warning: Connection refused. Retrying...
    default: Warning: Connection refused. Retrying...

有人可以告诉我我可能错在哪里吗?我也尝试更改图像,但没有成功。

【问题讨论】:

    标签: ssh vagrant docker vagrantfile


    【解决方案1】:

    首先从以下位置下载phusion提供的不安全密钥:

    https://github.com/phusion/baseimage-docker/blob/master/image/insecure_key
    

    * 请记住,不安全的密钥只能用于开发目的。

    现在,您需要通过将以下内容添加到 Dockerfile 中来启用 ssh:

    FROM phusion/baseimage
    RUN rm -f /etc/service/sshd/down
    RUN /etc/my_init.d/00_regen_ssh_host_keys.sh
    RUN /usr/sbin/enable_insecure_key
    

    启用 ssh 并在 Vagrantfile 中指定密钥文件:

    Vagrant.configure("2") do |config|
      config.vm.define "app" do |app|
        app.vm.provider "docker" do |d|
          d.build_dir = "."
          d.cmd = ["/sbin/my_init", "--enable-insecure-key"]
          d.has_ssh = true
        end 
      end
      config.ssh.username = "root"
      config.ssh.private_key_path = "path/to/your/insecure_key"
    end
    

    提升你的环境

    vagrant up
    

    现在你应该可以通过 ssh 访问你的容器了

    vagrant ssh app
    

    【讨论】:

    • 酷,这行得通!你介意解释一下第一个 docker 线路中发生了什么吗? ...您对如何使用我自己生成的密钥有什么建议吗?
    • phusion docker 镜像默认禁用 ssh 服务器。在 dockerfile 我们启用它,删除 /etc/service/sshd/down。第二行配置 SSH 服务器,最后一行将不安全的密钥包含在 /root/.ssh/authorized_keys 中。你可以在github.com/phusion/baseimage-docker/blob/master/image/…github.com/phusion/baseimage-docker/blob/master/image/bin/…查看执行的脚本。
    • 我正在尝试准确地遵循本指南,但最后我仍然得到phusion: Warning: Connection refused. Retrying...。任何想法如何解决这个问题?
    • 我能想到的第一件事是关于您的 insecure_key 文件。您是否已下载并在 config.ssh.private_key_path = "path/to/your/insecure_key" 设置路径?非root用户可以访问该文件吗?
    • 我也不断收到应用程序:警告:连接被拒绝。正在重试...我很确定 insecure_key 文件具有正确的权限。对此有什么想法吗?
    【解决方案2】:

    phusion/baseimage 没有default 启用的不安全私钥。您必须使用以下内容创建自己的基础镜像FROM phusion/baseimage

    RUN /usr/sbin/enable_insecure_key
    

    【讨论】:

    • 我也尝试使用 centos:7 或 Ubuntu:14.04 映像,方法是运行 ping 命令而不是启用不安全的密钥。默认情况下,vagrant 应该使用 vagrant 附带的默认不安全密钥并连接到刚刚提供的容器,对吗?我不知道这是否与手头的问题有关?这是一个正确的评估吗?
    • Docker 容器默认运行一个进程。因此,如果您使用 ubuntu 或 centos,除非您将 ssh 守护进程设置为 ENTRYPOINT,否则您将无法 ssh 进入。 phusion/baseimage 通过设置一个复杂的入口点来解决这个问题,该入口点使用 runit 运行其他服务。
    猜你喜欢
    • 2016-09-08
    • 2014-04-16
    • 2017-03-26
    • 2014-08-31
    • 1970-01-01
    • 2016-04-09
    • 2015-09-23
    • 2016-02-26
    • 2016-11-12
    相关资源
    最近更新 更多