Vagrant无法通过ssh连接到docker

Vagrant无法通过ssh连接到docker,ssh,docker,vagrant,centos7,openssh,Ssh,Docker,Vagrant,Centos7,Openssh,我正试图通过vagrant连接到docker实例 这是我的Dockerfile: FROM centos:7 #RUN yum -y update RUN yum -y install openssh-server wget sudo EXPOSE 22 RUN mkdir -p /home/vagrant/.ssh RUN chmod 0700 /home/vagrant/.ssh RUN useradd --create-home -s /bin/bash vagrant WORKDIR /

我正试图通过vagrant连接到docker实例

这是我的Dockerfile:

FROM centos:7
#RUN yum -y update
RUN yum -y install openssh-server wget sudo
EXPOSE 22
RUN mkdir -p /home/vagrant/.ssh
RUN chmod 0700 /home/vagrant/.ssh
RUN useradd --create-home -s /bin/bash vagrant
WORKDIR /home/vagrant
RUN mkdir -p /home/vagrant/.ssh
RUN echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" > /home/vagrant/.ssh/authorized_keys
RUN chmod 0600 /home/vagrant/.ssh/authorized_keys
RUN chown -R vagrant: /home/vagrant/.ssh
RUN mkdir -p /etc/sudoers.d
RUN install -b -m 0440 /dev/null /etc/sudoers.d/vagrant
RUN echo 'vagrant ALL=NOPASSWD: ALL' >> /etc/sudoers.d/vagrant
RUN sed -i 's|#AuthorizedKeysFile|AuthorizedKeysFile|g' /etc/ssh/sshd_config
CMD ["/usr/sbin/sshd", "-D"]
这是我的流浪汉档案:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
 config.vm.provider "docker" do |d|
    d.build_dir = "."
    d.name = "test"
    d.has_ssh = true
  end
  config.ssh.port = 22
end
在流浪之后,我得到了这个:

==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 172.17.0.2: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...
它多次打印最后一行,我用Ctrl-C停止

如果我只是运行docker build-t stacko.&docker run stacko流程将卡在此处:

Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
有什么不对劲吗

我的解决方案

似乎问题出在docker主机密钥上。所以我再生了它们

FROM centos:7

ENV container docker

# Stuck at “loaded plugins: fastestmirror” fix
RUN rm -f /var/lib/rpm/__*
RUN rpm --rebuilddb -v -v

RUN yum -y update
RUN yum -y install openssh-server openssh-clients sudo
RUN yum clean all

RUN rm -f /etc/ssh/ssh_host_rsa_key
RUN rm -f /etc/ssh/ssh_host_dsa_key
RUN rm -f /etc/ssh/ssh_host_ecdsa_key
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -q -N "" -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key

RUN useradd -s /bin/bash vagrant
RUN echo -n 'vagrant:vagrant' | chpasswd
RUN mkdir -p /home/vagrant/.ssh
RUN chmod 0700 /home/vagrant/.ssh
RUN echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key" > /home/vagrant/.ssh/authorized_keys
RUN chmod 0600 /home/vagrant/.ssh/authorized_keys
RUN chown -R vagrant: /home/vagrant/.ssh
RUN mkdir -p /etc/sudoers.d
RUN install -b -m 0440 /dev/null /etc/sudoers.d/vagrant
RUN echo 'vagrant ALL=NOPASSWD: ALL' >> /etc/sudoers.d/vagrant
RUN sed -i 's/Defaults    requiretty/#Defaults    requiretty/g' /etc/sudoers

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D"]

如果solmeone能解释为什么会这样(ssh密钥有什么问题)

您的ssh根本没有运行,那就太好了。你需要更好地理解docker CMD:@michael_bitard。你的意思是只执行最后一个命令?但我怎么才能让容器保持运行状态呢?你不能,当你
docker build
时,docker文件的两行之间的每个进程都会停止,你必须在使用
docker run
@michael_bitard时启动ssh服务器。你的意思是:sudo vagrant docker run——服务ssh重启?但这是行不通的。给出错误:Stderr:/usr/bin/docker:守护进程的错误响应:未找到或不存在容器命令“service”。@michael\u bitard。我编辑了我的Dockerfiel。我想现在ssh应该运行了?但现在我得到了默认值:警告:远程连接断开。重试。。。