本文最后更新于 2023-09-13,该文章更新时间较久,如有变动或失误地方请留言或自行查找。

 

当我们通过 Docker 部署一些应用程序时,大部分教程基本都是在线部署,并且拉取的远程镜像,这就导致了我们的端口都是默认端口,例如青龙面板的 5700 端口,如果在部署青龙面板之后没有更改映射端口,很容易就会被机器通过IP地址+5700 将我们所部署的青龙面板扫描到,并长期、频繁登录……

 

所以,我们在拉镜像创建容器的之后,首先要做的就是更改容器端口,除了复杂的命令行方法之外,我们通过宝塔操作,修改端口其实非常简单。

 

宝塔面板修改容器端口

 

以下步骤以宝塔面板,通过 docker 安装青龙面板容器为例,初始端口为5700。

 

首先,我们通过终端执行以下命令,获取相应容器的名称「NAMES」。

 

docker ps

 

然后我们执行检查终端命令,根据对应的容器名称拉取信息,并查找容器文件所在目录。这里我的容器名称是“qinglong”,务必根据自己第一步获取容器名称进行替换。

 

docker inspect qinglong

 

在拉取容器相关信息后,我们可以看到如下图所示内容,其中 /var/lib/docker/containers/……(此处为容器ID)就是我们当前查询容器文件所在目录,打开新的宝塔管理界面访问获取路径和对应的容器ID,打开目录后可以看到容器的配置文件 hostconfig.json 。

 

终端设置.jpg

 

接下来,我们在宝塔管理面板找到软件商店,打开 「docker管理器」,在状态管理位置停止容器运行。

 

这里需要说一下,我个人在停止容器运行状态后,关闭 「docker管理器」后,容器会自动恢复运行状态,导致配置文件修改无法生效,如果你也出现同类情况,可以在新标签页打开一个新的宝塔管理面板进行文件管理,原页面在停止容器运行状态后不要关闭「docker管理器」。

 

容器停止运行后,我们打开先前查询目录下的 hostconfig.json 文件,搜索 PortBindings ,你会看到下面这样一串代码,其中 "5700/tcp"  和 "5701/tcp"   就是容器镜像的设定端口。[{"HostIp":"","HostPort":"5700"}]  就是我们需要映射的对外端口。

 

"PortBindings":{"5700/tcp":[{"HostIp":"","HostPort":"5700"}],"5701/tcp":[{"HostIp":"","HostPort":"5701"}]}

 

一般情况下,只需要更改 5700 对外端口即可,例如 {"5700/tcp":[{"HostIp":"","HostPort":"9999"}] ,就是我们将对外端口更改为 9999 后的代码。

 

此时保存文件后可以再打开检查下,保存是否生效,如果与我们保存的信心一致,则可以返回 「docker管理器」 恢复容器运行状态,在容器列表点击对外端口,就可以看到 5700 端口对应的 对外端口是我们修改后的 9999端口。

 

端口对外.png

 

最后就需要我们到宝塔的安全管理界面放行我们修改的新端口号,如果你是腾讯云版的宝塔界面,只需在宝塔对相应端口进行放行即可,否则除了宝塔放行端口之外,你还需要到对应的服务器安全管理组,对新增的端口进行放行。

 

至此,我们的容器端口就已经修改完毕,此时用域名+新对外端口即可访问容器应用,例如:http://127.0.0.1:9999/

 

给容器绑定域名(反向代理)

 

虽然绑定域名后,依然可以被人查到我们的IP地址,但是绑定域名主要的目的还是提供方便,而且即便IP地址可以被查到,没有对应的端口别人还是无法访问我们的青龙管理后台面板。

我们只需要在宝塔管理面板中的网站中,新增站点,其中FTP、数据库均不创建,PHP选择纯静态即可。然后完成一个站点创建。

 

打开站点设置界面,找到下面的「反向代理」 并创建反向代理,其中目标URL填写「IP地址+新端口」即可,代理名称随意设置,其他默认即可。

 

反向代理.png

 

至此,我们的容器反向代理即创建成功了,后续我们通过域名便可以访问通过 Docker 部署的青龙面板后台。

 

以上就是通过宝塔面板修改 docker 容器对外端口和反向代理设置的方法,虽然以青龙面板为例,但其他容器都同样可以进行操作。

 

写在最后

之所以出这样一个教程,主要是一开始跟着教程创建容器部署青龙面板,并没有修改容器对外端口,导致被机器扫描,虽然青龙面板密码不是默认的 ,但依然被上千次的错误登录导致后台无法访问,一气之下我们只能删除容器重新创建。

 

这样让我长了记性,在创建容易后的第一件事就是修改对外端口。

 

另外就是我在查阅资料的时候,大部分教程要么是通过终端命令进行修改,要么就是写的不够清晰,导致其他问题的出现,所以有了这篇教程。至于反向代理,可能青龙面板不是很需要,但我在部署 bark 的时候,要用到反向代理,所以也顺手写一下,希望对你所帮助。