在docker容器中运行node服务,使用URL.createObjectURL生成上传文件地址,但是地址中ip是nodedata
时间: 2024-03-01 16:51:39 浏览: 108
node 上传文件
这是因为在Docker容器中运行Node服务时,容器内部的IP地址与主机上的IP地址是不同的,所以生成的上传文件地址中会包含容器内部的IP地址。解决这个问题的方法是使用Docker的端口映射功能,将容器内部的端口映射到主机的端口上,然后在生成上传文件地址时使用主机的IP地址即可。具体的操作步骤如下:
1. 在运行Docker容器时,使用`-p`参数将容器内部的端口映射到主机上的端口。例如,将容器内部的3000端口映射到主机上的3000端口,可以使用以下命令:
```
docker run -p 3000:3000 your-image-name
```
2. 在Node服务中,使用`req.hostname`获取请求的主机名,然后将主机名替换为主机的IP地址即可。例如,使用以下代码将URL地址中的主机名替换为主机的IP地址:
```js
const ip = require('ip');
const fileUrl = URL.createObjectURL(file);
const hostname = req.hostname.replace('nodedata', ip.address());
const uploadUrl = fileUrl.replace(req.hostname, hostname);
```
这样生成的上传文件地址中就会包含主机的IP地址,而不是容器内部的IP地址了。
阅读全文