我正在研究docker。
我在本地电脑(window)上使用 SSH 连接到我的服务器电脑(ubuntu)。
在服务器 PC 上,我从 docker hub 中提取了 nginx 镜像,并使用端口选项运行它。
{server}@{server}:~$ docker run -itd --name test -p 32769:80 nginx:latest
这是docker进程状态。
{server}@{server}:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
687b709f8675 nginx:latest "/docker-entrypoint.…" 50 minutes ago Up 50 minutes 0.0.0.0:32769->80/tcp, :::32769->80/tcp test
我也通过此命令检查端口状态
{server}@{server}:~$ netstat -ntlp | grep 32769
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:32769 0.0.0.0:* LISTEN -
tcp6 0 0 :::32769 :::* LISTEN -
在本地电脑上,我尝试访问服务器电脑的 32769 端口。但是没有成功。
在 chrome 上,我尝试连接“http://{server_ip}:32769/”。失败了。
并在cmd上尝试了这个命令。
C:{local_path}>tcping {server_ip} 32769
Probing {server_ip}:32769/tcp - No response - time=2003.578ms
Probing {server_ip}:32769/tcp - No response - time=2007.065ms
所以我认为这个问题与防火墙有关,并且在服务器 PC 上,我停止了防火墙。
{server}@{server}:~$ sudo systemctl stop firewalld
停止firewalld后,连接成功。
但是我的问题是这样。我知道如果我在防火墙上添加一些选项以允许连接,连接必须成功。就我而言,它没有成功。这是我在防火墙上添加选项的命令。
{server}@{server}:~$ firewall-cmd --permanent --add-port=32769/tcp
{server}@{server}:~$ firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp3s0
sources:
services: dhcpv6-client ssh
ports: 32769/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
{server}@{server}:~$ sudo systemctl start firewalld
但连接失败。请帮帮我。我不想通过关闭整个防火墙来解决这个问题。我想使用防火墙并允许连接到特定端口。我的命令有什么问题?