如何获得我的 docker centos sshd 无密码服务器 运行?
How to get my docker centos sshd passwordless server running?
我是 运行 我的 docker 容器:
docker run -d sequenceiq/hadoop-docker:2.6.0
在我的 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,发现有一个bug,sshd配置监听2122端口,但是暴露的端口是22,可见here。此外,当我尝试构建您提供的最新 Dockerfile 时,它在第 31 步失败,因此您可能需要进一步调查。
问题更新后编辑:
查看您提供的 docker ps 输出和 Dockerfile。 sshd 配置为侦听端口 2122(如果您没有更改它,因为我们没有您的完整 docker 文件),并且在输出中我们看到
0.0.0.0:32799->2122/tcp
0.0.0.0:32800->2022/tcp
您应该使用 ssh -v localhost -p 32799
而不是 32800 进行连接,因为容器内的端口 2022 上没有任何内容在侦听
我是 运行 我的 docker 容器:
docker run -d sequenceiq/hadoop-docker:2.6.0
在我的 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,发现有一个bug,sshd配置监听2122端口,但是暴露的端口是22,可见here。此外,当我尝试构建您提供的最新 Dockerfile 时,它在第 31 步失败,因此您可能需要进一步调查。
问题更新后编辑:
查看您提供的 docker ps 输出和 Dockerfile。 sshd 配置为侦听端口 2122(如果您没有更改它,因为我们没有您的完整 docker 文件),并且在输出中我们看到
0.0.0.0:32799->2122/tcp
0.0.0.0:32800->2022/tcp
您应该使用 ssh -v localhost -p 32799
而不是 32800 进行连接,因为容器内的端口 2022 上没有任何内容在侦听