连接到暴露的docker容器

时间:2014-10-09 19:49:57

标签: docker

我试图将docker容器暴露给外部世界,而不仅仅是主机。当我从基础CentOS图像创建图像时,它看起来像这样:

# install openssh server and ssh client
RUN yum install -y openssh-server
RUN yum install -y openssh-clients

RUN echo 'root:password' | chpasswd

RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config

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

我像这样运行这个图像:

sudo docker run -d -P crystal/ssh

当我尝试用sudo docker ps查看容器时,我看到Ports:

0.0.0.0:49154->22tcp

如果我在主机(ubuntu)上ifconfig,我看到docker0 inet addr:172.17.42.1。我可以从我的主机ping这个,但不能从任何其他机器ping。在设置容器以查看外部世界时,我做错了什么?感谢。

编辑:

我已经尝试检查容器的IPAddress,我看到IPAddress:172.17.0.28,但我无法ping通...

如果我尝试使用nmap,那似乎会返回端口。那么这是否意味着它是开放的,如果我有ssh设置,我应该能够进入它?感谢。

nmap -p 49154 10.211.55.1显示端口已打开,并且服务未知。

我试图通过ssh -l root -p 49154 10.211.55.1 ssh in我得到

Read from socket failed: Connection reset by peer.

2 个答案:

答案 0 :(得分:2)

<强>更新

您的Dockerfile错误。你的sshd没有正确配置,它没有正确启动,这就是容器没有正确响应端口22的原因。看错误:

Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key

您需要生成主机密钥。这条线将起到魔力:

RUN ssh-keygen -P "" -t dsa -f /etc/ssh/ssh_host_dsa_key

以前的答案

您可能需要查找eth0接口的IP地址(可从网络访问),您需要通过此IP地址连接到您的容器。来自/到docker0网桥的流量应默认转发到您的eth接口。

此外,您最好检查是否启用了IP转发:

cat /proc/sys/net/ipv4/ip_forward

此命令应返回1,否则应执行:

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

问:为什么你可以通过这种方式连接到容器?

如果启用了ip转发,则从eth0接口传入的数据包将转发到虚拟docker0接口。魔术发生,并在正确的容器上收到数据包。有关详细信息,请参阅Docker Advanced Networking

  

docker0不是普通的界面。它是一个虚拟以太网桥   自动在任何其他网络之间转发数据包   附加到它的接口。这允许容器进行通信   与主机和彼此。每次Docker   创建一个容器,它创建一对“对等”接口   像管道的两端 - 将收到一个发送的数据包   在另一。它使容器中的一个对等体成为它的容器   eth0接口并保留其他对等体,具有唯一的名称   vethAQI2QT,在主机的命名空间中。通过绑定每一个   与docker0网桥的接口,Docker创建了一个虚拟子网   在主机和每个Docker容器之间共享。

答案 1 :(得分:0)

您无法从主机外部ping 172.17.42.1,因为它是私有IP,因此只能在专用网络中访问它,因为它是由您运行docker容器的主机创建的,虚拟交换机docker0和docker容器,它与虚拟接口连接到桥接器docker0 ...

此外172.17.42.1是桥接器docker0的ip,而不是docker实例的ip。如果你想知道docker实例的ip,你必须在其中运行ifconfig,或者你可以使用docker inspect

我不是端口映射方面的专家,但对我而言,这意味着要访问端口22上的docker容器,您必须连接到主机的端口49154,并且所有流量都将被转发。