docker进阶之容器请求的网络方式(实现docker容器之间域名访问)

上一篇文章《docker进阶之操作命令实战操作镜像和容器(下载镜像、启动容器、打包发布镜像)》写到要修改docker容器内部的内容需要docker exec进入容器内部,修改起来非常不方便,本文解决这个难题。

1. 外部网络访问方式

例如,我们起了两个容器应用,nginx1和nginx2,正常请求我们会进入nginx2,请求nginx1,如下:
这种方式容器间内部的请求需要经过外部网络,如下图网络关系太不便捷
在这里插入图片描述
在这里插入图片描述

2. 内部网络访问方式

其实docker有更便捷的网络机制,安装docker之后,docker会默认有自己的网卡,每创建一个容器,这个容器相当于加入了这个网络。
docker为每个容器分配唯一ip,使用容器ip+容器端口可以互相访问。
在这里插入图片描述
docker inspect nginx.2 可以查看到nginx.2的容器内的ip是172.17.0.3
在这里插入图片描述
在这里插入图片描述

docker inspect nginx.1 可以查看到nginx.2的容器内的ip是172.17.0.2
在这里插入图片描述
在这里插入图片描述
那么我们测试一下,
docker exec -it nginx.2 bash
在这里插入图片描述
docker rm -f $(docker ps -aq) 快速删除所有运行的容器
docker image ls 列出镜像
docker container inspect 查看详细信息

3. 域名访问方式(docker容器加入域名网络)

创建自定义网络,容器名就是域名
`docker network --help`					查看docker network的用法
`docker network create 域名`			创建域名
`docker run --network 域名`			启动容器时加入域名

在这里插入图片描述

##虚拟机环境启动两个nginx,验证域名访问nginx的网页正常
docker run -d -p 80:80 --name nginx.1 --network mydockernet nginx:1.26.0
docker run -d -p 81:80 --name nginx.2 --network mydockernet mynginx:v1.0
docker exec -it nginx.1 bash
curl http://nginx.2:80

在这里插入图片描述

<think>嗯,用户想了解如何用Postman请求本地服务。首先,我需要确认用户是否了解Postman的基本使用,比如创建请求、选择方法、输入URL这些步骤。不过用户可能已经知道这些,所以重点应该放在本地服务的配置和常见问题上。 接下来,本地服务通常运行在localhost或者127.0.0.1,端口可能有多种,比如3000、8080之类的。需要提醒用户检查本地服务是否正在运行,并且监听了正确的端口。这里可能需要提到如何查看服务日志或者启动命令,确保服务没有报错。 然后,跨域问题(CORS)是一个常见的障碍。如果本地服务没有正确配置CORS头,Postman虽然本身不受浏览器限制,但如果用户的前端代码通过Postman代理请求,或者服务端有安全限制,可能会有影响。这时候需要告诉用户如何在服务端设置Access-Control-Allow-Origin等头信息,或者暂时禁用安全设置进行测试。 HTTPS的情况也需要考虑,有些本地开发环境可能使用自签名证书,Postman默认会校验SSL证书,导致请求失败。这时候需要指导用户关闭SSL验证,在Postman的设置里找到相关选项,或者添加例外。 另外,如果用户的本地服务在Docker容器或虚拟机上运行,IP地址可能不是127.0.0.1,这时候需要确认容器网络设置是否正确,端口是否映射到宿主机。例如,Docker可能需要用host网络或者-p参数映射端口。 还有,防火墙或安全软件可能会阻止本地连接,特别是某些端口被拦截。需要建议用户检查防火墙设置,确保端口开放。或者临时关闭防火墙测试,但要注意安全。 请求方法(GET、POST等)是否正确,特别是POST请求需要设置正确的Content-Type和请求体数据格式,比如JSON、表单数据。如果服务端期望JSON但用户发送的是表单,就会出错。这时候需要演示如何在Postman中设置Headers和Body。 路径是否正确,比如服务是否有特定的路由,比如/api/users,而用户可能漏掉了部分路径。建议用户检查服务端路由定义,或者尝试用curl测试,确认服务是否响应。 最后,可能需要提到Postman的环境变量和预请求脚本,帮助用户管理不同的本地环境,比如开发、测试的不同端口或域名。不过这可能属于进阶内容,根据用户的需求决定是否深入。 总结一下,回答的结构应该是先介绍基本步骤,然后详细说明每个步骤的注意事项和常见问题,帮助用户逐步排查。确保语言清晰,步骤具体,用户能跟着操作解决问题。</think>好的,我来逐步介绍如何使用 Postman 请求本地服务: --- ### 一、本地服务的基本要求 1. **确保服务正在运行** 本地服务需通过 `localhost` 或 `127.0.0.1` 监听端口(如 `http://localhost:3000`)。 2. **开放端口验证** 用浏览器访问 `http://localhost:端口号`,确认服务可正常响应(如出现欢迎页面或 API 返回数据)。 --- ### 二、Postman 请求步骤 1. **新建请求** - 打开 Postman → 点击左上角 `+ New` → 选择 `HTTP Request`。 2. **填写请求信息** - **方法**:选择对应 HTTP 方法(GET/POST/PUT 等)。 - **URL**:输入本地服务地址,例如 `http://localhost:3000/api/data`。 - **Headers**:按需添加请求头(如 `Content-Type: application/json`)。 3. **请求体(Body)** - 若为 POST/PUT 请求: - 选择 `Body` 标签 → `raw` → 输入 JSON 数据: ```json { "name": "test", "value": 123 } ``` 4. **发送请求** - 点击 `Send` 按钮 → 查看响应状态码、返回数据及耗时。 --- ### 三、常见问题排查 #### 1. **连接被拒绝(Connection refused)** - 原因:服务未启动/端口未监听。 - 解决: - 检查服务启动命令(如 `npm start`)。 - 用 `netstat -ano | findstr :3000`(Windows)或 `lsof -i :3000`(Mac/Linux)确认端口占用。 #### 2. **跨域问题(CORS)** - 现象:浏览器正常但 Postman 无响应。 - 解决: - 服务端需设置响应头: ```http Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET,POST ``` #### 3. **HTTPS 证书问题** - 现象:SSL 证书校验失败。 - 解决: - Postman → `Settings` → `General` → 关闭 `SSL certificate verification`。 #### 4. **Docker/虚拟机环境** - 若服务运行在容器内: - 使用宿主机 IP(如 `http://192.168.x.x:3000`)。 - 确认 Docker 端口映射:`docker run -p 3000:3000 my-service` --- ### 四、高级技巧 1. **环境变量** 创建 `Local` 环境,定义变量如 `base_url = http://localhost:3000`,URL 中引用 `{{base_url}}/api/data`。 2. **自动化测试** 在 `Tests` 标签中编写脚本验证响应: ```javascript pm.test("Status code is 200", () => { pm.response.to.have.status(200); }); ``` --- ### 五、示例流程 1. 启动本地 Node.js 服务: ```bash node app.js # 监听 3000 端口 ``` 2. Postman 发送 GET 请求到 `http://localhost:3000/api/users` 3. 查看返回的 JSON 数据。 --- 遇到具体问题可提供更多细节(如服务框架、错误日志),我会进一步协助分析!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值