我正在使用以下命令运行我的Docker容器:

docker run -d sequenceiq/hadoop-docker:2.6.0

Dockerfile is here

在我的Mac上启动后,我正在运行docker ps并获取:
6bfa4f2fd3b5        sequenceiq/hadoop-docker:2.6.0   "/etc/bootstrap.sh -d"   4 minutes ago       Up 4 minutes        22/tcp, 8030-8033/tcp, 8040/tcp, 8042/tcp, 8088/tcp, 49707/tcp, 50010/tcp, 50020/tcp, 50070/tcp, 50075/tcp, 50090/tcp   kind_hawking

那我就跑
ssh -v localhost -p 22

而我得到
OpenSSH_7.4p1, LibreSSL 2.5.0
debug1: Reading configuration data /Users/User/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to localhost [::1] port 22.
debug1: connect to address ::1 port 22: Connection refused
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: connect to address 127.0.0.1 port 22: Connection refused
ssh: connect to host localhost port 22: Connection refused

假设:我认为这不是其他centos sshd问题的重复,因为这是不同的centos版本。 (对于那些相似的对象-它正在执行可能相似的问题所要求的并且不起作用)。

我的问题是:如何使我的docker centos sshd无密码服务器运行?

编辑:
@Andrew在帮助我完善我的问题方面一直非常有帮助-顺理成章。

这是我更新的Dockerfile
从sequenceiq / hadoop-docker:2.6.0
CMD ["/etc/bootstrap.sh", "-d"]

# Hdfs ports
EXPOSE 50010 50020 50070 50075 50090 8020 9000
# Mapred ports
EXPOSE 10020 19888
#Yarn ports
EXPOSE 8030 8031 8032 8033 8040 8042 8088
#Other ports
EXPOSE 49707 2122

EXPOSE 9000

EXPOSE 2022

现在,我使用以下方法进行构建:
 sudo docker build -t my-hdfs .

然后我用以下命令运行它:
sudo docker run -d -p my-hdfs

然后,我使用以下方法检查过程:
sudo docker ps

结果如下:
d9c9855cfaf0        my-hdfs             "/etc/bootstrap.sh -d"   2 minutes ago
Up 2 minutes        0.0.0.0:32801->22/tcp, 0.0.0.0:32800->2022/tcp,
0.0.0.0:32799->2122/tcp, 0.0.0.0:32798->8020/tcp, 0.0.0.0:32797->8030/tcp,
0.0.0.0:32796->8031/tcp, 0.0.0.0:32795->8032/tcp, 0.0.0.0:32794->8033/tcp,
0.0.0.0:32793->8040/tcp, 0.0.0.0:32792->8042/tcp, 0.0.0.0:32791->8088/tcp,
0.0.0.0:32790->9000/tcp, 0.0.0.0:32789->10020/tcp, 0.0.0.0:32788->19888/tcp,
0.0.0.0:32787->49707/tcp, 0.0.0.0:32786->50010/tcp, 0.0.0.0:32785->50020/tcp,
0.0.0.0:32784->50070/tcp, 0.0.0.0:32783->50075/tcp, 0.0.0.0:32782->50090/tcp
agitated_curran

然后获取我正在运行的IP地址:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' d9c9855cfaf0

结果像
172.17.0.3

然后我用以下方法进行测试:
ssh -v 172.17.0.3 -p 32800

结果如下:
OpenSSH_7.4p1, LibreSSL 2.5.0
debug1: Reading configuration data /Users/User/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to 172.17.0.3 [172.17.0.3] port 32800.

debug1: connect to address 172.17.0.3 port 32800: Operation timed out
ssh: connect to host 172.17.0.3 port 32800: Operation timed out

我的问题是:如何使我的docker centos sshd无密码服务器运行?

最佳答案

您正在尝试连接到本地ssh服务器而不是容器。要连接到容器内的任何端口,您需要公开并发布它,并可能将其映射到另一个端口,尤其是当您想在同一主机上的不同端口上运行多个类似容器时。参见Expose

因此,在您的情况下,您的命令应为

docker run -p 2222:22 -d sequenceiq/hadoop-docker:2.6.0

和ssh命令
ssh -v localhost -p 2222

暴露docker端口(如链接的docker文件中所示)使其可访问
到其他Docker容器,而不到您的主机。要了解公开端口和已发布端口之间的区别,请参见this question

但是,当我尝试连接到端口2222时,它没有起作用。查看2.6.0版本的Dockerfile,我发现它存在一个错误,其中sshd配置为侦听端口2122,但暴露的端口为22,如here所示。另外,当我尝试构建您提供的最新Dockerfile时,它在步骤31中失败,因此您可能需要进一步调查。

,在问题更新后进行编辑:

查看您提供的docker ps输出以及Dockerfile。 sshd配置为侦听端口2122(如果您没有更改端口号,因为我们没有您的完整的dockerfile),在输出中我们会看到
0.0.0.0:32799->2122/tcp
0.0.0.0:32800->2022/tcp

您应该以ssh -v localhost -p 32799而不是32800的方式连接,因为没有任何内容在容器内的端口2022上进行监听

关于docker - 如何使我的docker centos sshd无密码服务器运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43294002/

10-10 04:04