请教一个前端 docker 部署后带参数 run 的问题

2023-02-14 18:40:33 +08:00
 variousdidt
因为前端 fetch 的 url 前缀不确定,对方想要在拿到镜像后自己确定 ip 和端口,能不能让对方 docker run -e 的方式启动,js 运行的时候能像获取环境变量一样获取这个变量?
1239 次点击
所在节点    问与答
10 条回复
rimutuyuan
2023-02-14 18:57:15 +08:00
可以,你为什么不亲自试一试呢
variousdidt
2023-02-14 21:06:56 +08:00
@rimutuyuan 我试了,可是我打包的时候去拿什么呢,如果拿环境变量会直接报错,process 不存在
peterjose
2023-02-14 21:32:27 +08:00
想知道
264768502
2023-02-14 21:53:50 +08:00
利用 enteypoint+dockerize 在启动时写入一个配置文件,然后用户访问时先 fetch 配置文件,然后拼凑 url
rrfeng
2023-02-14 21:55:33 +08:00
端口不是 -d 指定的吗
cdlnls
2023-02-15 00:12:41 +08:00
是可以的。mysql 镜像第一次启动的时候初始化,就是使用的环境变量传递的参数。按理说只要修改镜像启动脚本,判断启动的时候有没有传环境变量,如果传了变量就通过脚本修改配置,修改后再按照正常流程启动就能满足你的需求。

不知道有没有更优雅的方式处理
lingly02
2023-02-15 00:44:30 +08:00
vue 等前端代码编译后是 html+js ,只能运行在浏览器里,没法直接使用环境变量。应该在 nginx 里配指向后端的反向代理,启动时读取环境变量来生成新的配置文件。fetch 时只需使用指向本站的路径。
chenluo0429
2023-02-15 07:50:32 +08:00
有几种方案,思路都是靠启动脚本在镜像启动时做一些预处理。
比如打包时后端服务地址写成占位符,然后启动时进行文本替换。或者将配置的环境变量写入到静态资源文件中,运行时先拉取固定位置的配置文件,然后解析出后端服务地址。
还有根据环境变量配置反向代理,前端访问类似 /api 目录,由 nginx 代理到真实后端。但是这个不推荐
MuscleOf2016
2023-02-15 08:24:08 +08:00
1 、纯前端静态文件,请求接口的时候,都 /api/request ,根目录去请求,前后端前置一个 ngx 根据 ngx 去转发 /api 转到后端,/login 这种转到前端
2 、要是 ssr 这种,请求直接写主机名,docker 内能访问后端的 hostname ,浏览器直接访问前端。让他们后端服务的主机名:端口 跟你写的一样。
tyx1703
2023-02-15 09:06:03 +08:00
@chenluo0429 反向代理为何不推荐?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/916106

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX