Docker运行之“连接被重置”
0x00 前言(跳过)
事件的起因是我在安装测试环境镜像之后,去访问页面,发现无论我怎么尝试,总是提示我 连接已经被重置,虽然只是一个端口映射问题,但第一次遇见这种情况,依旧浪费了很多时间去搜索各种文章才决绝,特在此记录。
0x01 正文
0x01.1 查看 docker 开放的端口
- 连接被重置的原因是由于端口映射除了问题,即:本地映射的 docker 端口与其本身开放的端口不一致。如:docker 开放的端口是 8080,因为漏看的缘故,在拉取下来第一次运行时,将端口映射为了80端口,这就会导致“连接被重置”的问题。
- 如果你想确认 docker 本身开放的端口是什么,可以通过以下操作查看:
- 先进入 docker 容器 :
docker exec -it [dockerId] bash
; - 然后通过命令:
ss -ntl
查看 docker 开放的端口。
- 可以看到本地开放端口为 8080 。
- 先进入 docker 容器 :
0x01.2 修改本地映射的 docker 端口
- 先将正在运行的未修改的 docker 停止运行,并删除:
docker stop [dockerId]
docker rm [dockerId]
- 然后重新运行并映射 docker
docker run -d -p [ip地址][本地端口]:[docker开放的端口] 镜像地址
,例:
- ip地址不加的话默认是 0.0.0.0(127.0.0.1即本机环回地址)
- docker 已启动,尝试访问页面,成功。
0x02 相关命令的参数
0x02.1 docker run 的 OPTIONS
- OPTIONS说明:(黄标为常用选项)
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i : 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- –name=“nginx-lb”: 为容器指定一个名称;
- –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h “mars”: 指定容器的hostname;
- -e username=“ritchie”:设置环境变量;
- –env-file=[]: 从指定文件读入环境变量;
- –cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
- -m:设置容器使用内存最大值;
- –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- –link=[]: 添加链接到另一个容器;
- –expose=[]:开放一个端口或一组端口;
0x02.2 ss 常用 OPTIONS
- OPTIONS说明:
- -h: --help 帮助
- -V:–version 显示版本号
- -t : --tcp 显示 TCP 协议的 sockets
- -u:–udp 显示 UDP 协议的 sockets
- -x: --unix 显示 unix domain sockets,与 -f 选项相同
- -n: --numeric 不解析服务的名称,如 “22” 端口不会显示成 “ssh”
- -l : --listening 只显示处于监听状态的端口
- -p: --processes 显示监听端口的进程(Ubuntu 上需要 sudo)
- -a: --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接
- -r : --resolve 把 IP 解释为域名,把端口号解释为协议名称