运行环境如下图所示,docker成功运行
常规解决方法
- 获取Docker容器的IP地址:
在Ubuntu终端中,首先找出您正在运行的Docker容器的ID或名称:
docker ps
如下图,容器ID是bd203de984e0,容器名称是sleepy_swartz
- 获取容器ip地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' bd203de984e0
或者使用容器名称:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' sleepy_swartz
-
启动MobaXterm:
在Windows上启动MobaXterm。 -
建立SSH连接:
在MobaXterm中,选择“Start a new session”然后选择SSH。在“Remote host”字段中输入之前获取的Docker容器的IP地址。如果您的Docker容器设置了SSH服务并指定了端口,也需要输入正确的端口号。
注意:默认情况下,Docker容器可能不会运行SSH服务。除非您的Docker镜像中明确设置了SSH服务并启动了它,否则您可能无法直接通过SSH连接。如果容器没有运行SSH,您可能需要修改Dockerfile以安装和配置SSH,然后重新构建镜像。
- 连接并进入容器:
点击“OK”或“Connect”开始连接。一旦连接成功,您将在MobaXterm中进入Docker容器的终端。
若docker inspect
命令执行成功,但没有返回任何IP地址
- 检查容器的完整网络设置:
docker inspect bd203de984e0
这将返回容器的完整配置和状态信息。您可以查看NetworkSettings部分以获取更多关于容器网络的信息。
若出现:
可以看到容器的NetworkMode被设置为host。这意味着容器共享了宿主机的网络命名空间,因此它没有自己的独立IP地址。
2. ifconfig
可以看到Ubuntu宿主机在enp0s3接口上的IP地址是10.0.2.15。若想通过MobaXterm或其他SSH客户端从另一台机器访问此Ubuntu宿主机(以及其上的Docker容器),应该使用这个IP地址10.0.2.15。
但请注意以下几点:
- SSH服务:确保您的Ubuntu宿主机上已经安装并运行了SSH服务。如果没有,您可以使用以下命令安装和启动SSH服务:
sudo apt update
sudo apt install openssh-server
sudo systemctl start ssh
- 防火墙设置:确保您的Ubuntu宿主机的防火墙允许SSH连接。默认SSH端口是22,但如果您更改了它,请确保允许正确的端口。具体判断如下。
如何判断和配置SSH连接的防火墙设置?
在Ubuntu上,您可以使用ufw
(Uncomplicated Firewall)来管理防火墙规则。以下是如何判断和配置SSH连接的防火墙设置的步骤:
- 检查
ufw
状态:
使用以下命令查看ufw的状态:
sudo ufw status
如果输出显示Status: inactive,则表示防火墙当前未启用,因此不会阻止任何连接。
如图
如果防火墙处于活动状态,将看到一个列表,显示允许和拒绝的规则。
- 允许SSH连接:
如果发现SSH连接被阻止,可以使用以下命令允许SSH连接:
sudo ufw allow ssh
或者,如果您更改了SSH的默认端口(例如,如果您使用的是2222端口),则可以使用以下命令允许连接:
sudo ufw allow 2222/tcp
- 启用/禁用
ufw
:
启用ufw
,可以使用以下命令:
sudo ufw enable
禁用ufw
,可以使用以下命令:
sudo ufw disable
请注意,更改防火墙设置可能会影响到其他服务和应用程序的连接。