在使用Docker容器时,了解容器内运行的服务及其占用的端口是非常重要的。本文将指导您如何列出容器内所有服务名称和占用的端口,并检查容器是否运行着OpenSSH服务。
1. 列出容器内所有服务名称和占用的端口
要找出当前容器内运行的服务及其绑定的端口,可以使用netstat
或ss
命令。
使用netstat
命令
如果您容器中有安装netstat
,可以使用以下命令来查找所有监听的TCP和UDP端口:
netstat -tuln
命令输出可能类似于:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:63322 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:888 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN
tcp6 0 0 :::63322 :::* LISTEN
使用ss
命令
如果您的容器使用的是ss
命令,可以这样操作:
ss -tuln
输出看起来与netstat
类似。
2. 检查容器是否运行着OpenSSH服务
要检查容器内是否正在运行OpenSSH服务,可以使用pgrep
或者ps
命令加上grep
来查找。
使用pgrep
命令
如果您有pgrep
命令,可以直接这样查询:
pgrep sshd
如果有ssh服务正在运行,它将返回一个或多个进程ID。如果没有返回任何东西,则意味着没有ssh服务正在运行。
使用ps
命令结合grep
如果没有pgrep
,可以使用ps
命令结合grep
来查找:
ps aux | grep sshd
这将显示所有包含sshd
关键词的进程列表。如果没有任何输出(除了grep自身的进程),则表示没有运行OpenSSH服务。
3. 查看具体服务占用端口的情况
假设您已经知道某个端口被某个服务占用,但不确定是哪个具体服务,可以使用lsof
命令来查找打开文件和IPC节点(例如网络套接字)。
lsof -i :端口号
例如,要找到占用端口63322的服务,可以这样做:
lsof -i :63322
这将会显示类似于以下的输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 20 root 3u IPv4 29903991 0t0 TCP *:63322 (LISTEN)
sshd 20 root 4u IPv6 29903993 0t0 TCP *:63322 (LISTEN)
BT-Panel 849 root 16u IPv4 41302087 0t0 TCP localhost:53958->localhost:63322 (ESTABLISHED)
sshd 47399 root 3u IPv4 41299442 0t0 TCP localhost:63322->localhost:53958 (ESTABLISHED)
这里可以看到sshd
进程使用PID 20占用着端口63322,并且有两个监听端口的文件描述符,一个是IPv4,另一个是IPv6。
4. 永久禁用IPv6连接
如果您希望永久禁用IPv6连接,可以通过修改OpenSSH的配置文件来实现这一点。
打开
sshd_config
文件编辑器:sudo nano /etc/ssh/sshd_config
在文件中添加或修改以下行:
# ListenAddress :: (这行可以注释掉) ListenAddress 0.0.0.0
- 保存并关闭文件。
重启OpenSSH服务使更改生效:
sudo systemctl restart ssh
结论
通过上述步骤,您可以轻松地管理和监控Docker容器内的服务端口及SSH服务的状态。这对于保证系统的安全性和稳定性至关重要。希望本文能够帮助您更好地理解和控制您的容器环境。
评论 (0)