容器内部

查看服务是否开启,以nginx为例

1
ps -ef | grep nginx

返回类似于以下图片,说明服务已经启动

1
systemctl stop firewalld

如果容器有防火墙,可以先关闭防火墙试一下
先查一下防火墙的状态,如果为下图就是关着呢

宿主机

先看容器是否正确映射端口
下图画红框的地方就是将容器内部的nginx服务映射到宿主机的32770端口,如果这里没有映射,那么外部设备肯定访问不到。

查看宿主机端口是否开启

1
ss -tlnp | grep 32770

类似于以下输出,说明端口没问题

如果还是访问不了,那么就是防火墙的问题了,可以尝试关闭防火墙。

1
systemctl stop firewalld

类似于下图就是关着呢

配置iptables使得所有流量都允许,可以通过以下命令清除当前的规则并设置允许所有的流量。

1
2
3
sudo iptables -F   # 清除所有链中的规则
sudo iptables -X # 删除所有自定义链
sudo iptables -Z # 清空规则链中的计数器

设置默认链为 ACCEPT,表示允许所有的传入、传出流量。执行以下命令:

1
2
3
sudo iptables -P INPUT ACCEPT    # 允许所有进入流量
sudo iptables -P FORWARD ACCEPT # 允许所有转发流量
sudo iptables -P OUTPUT ACCEPT # 允许所有输出流量

无需重启,立刻生效

默认情况下,iptables 规则在系统重启后会丢失。

根据系统版本不同,可以上网搜索对应的方法,将iptables规则保存下来,防止重启后失效。

容器内部

外部设备访问 http://宿主机:映射的端口 如果是以下页面,说明连接没问题,大概率是内部服务或代理的问题

我这里是后端的jar包端口映射错了,需要改运行的端口为8080

直接用命令复制jar包到宿主机再复制到本地windows电脑下

1
docker cp b634d0b5d430:/root/question-1.0.jar ./

然后用解压工具打开question-1.0.jar,修改 BOOT-INF\classes\目录下的application.yml文件

再复制回docker中,重新运行jar包

1
docker cp ./question-1.0.jar b634d0b5d430:/root/question-1.0.jar

先查看之前运行的任务,然后结束他

结束之后重新运行,因为之前已经复制jar包到容器中,所以直接运行就OK
这里的 nohup command & 是让jar包在后台运行

运行后可以看一下 nohup 的日志文件看看运行成功没有,这样是运行成功了。