多个 Docker 端口怎么改成用域名加路径或者二级域名去访问?

2018-11-15 14:36:29 +08:00
 jmyz0455

我购置了一台 VPS,用 Docker 构建了几个常用的应用,这里假设叫 do1、do2、do3,分别把暴露端口代理到宿主的 8001、8002、8003 端口上,并分享给朋友使用。考虑到以后朋友使用可能越来越频繁,需求导致我要开的应用越来越多,我可能要不断地增加应用下去,这个时候还用 ip:80** (比如 192.168.0.1:8001~192.168.0.1:8009 )来访问应用显得不合理。

所以问题来了,我能不能只开一个 80 端口,然后用不同的访问地址来对应到不同的 Docker 应用? 比如访问 192.168.0.1 就默认跳到 192.168.0.1/do1,然后 192.168.0.1/do2、192.168.0.1/do3 对应原本 do1、do2、do3 的 Docker 应用?

我不是网工或者运维,所以我只知道我的需求,不知道怎么去解决,我搜了一晚,都找不准关键词。 但是我搜到二级代理这个词,所以我想我可不可以申请一个域名,比如 my.com 这样,然后通过 do1.my.comdo2.my.comdo3.my.com 来访问不同的 Docker 应用?

以上的解决方案我不知道是否实际可行,Docker 我也是刚开始入门。请指点一个思路或者搜索关键词,谢谢。

4312 次点击
所在节点    程序员
24 条回复
tiedan
2018-11-15 14:39:44 +08:00
nginx
jmyz0455
2018-11-15 15:46:18 +08:00
@tiedan 我知道 Nginx 这个是服务器,所以请问用 ip+/路径 这个技术是叫什么,我想不到关键词。
xiaomimei
2018-11-15 15:50:57 +08:00
参考 https://help.aliyun.com/knowledge_detail/41467.html
或者搜一下 apache 监听多端口。
方法很多,看你喜欢哪一个了
vjnjc
2018-11-15 15:51:49 +08:00
vhost?
zgray
2018-11-15 15:52:58 +08:00
反向代理,docker 的话,建议看看 nginx-proxy 这个 image
sunny352787
2018-11-15 15:53:18 +08:00
应该搜反向代理
lllllliu
2018-11-15 15:54:17 +08:00
反向代理 / a / b / xxx 都可以指定 IP 和端口。
1419co1in
2018-11-15 15:57:27 +08:00
proxy_pass 到各个端口
Liang
2018-11-15 16:01:50 +08:00
反代就好了
neoblackcap
2018-11-15 16:02:28 +08:00
两种都可以,前者是反向代理,后者是子域名+vhost
kimqcn
2018-11-15 16:28:25 +08:00
用户 nginx 可以:
server {
listen 80;
server_name oa.myweb.cn;
access_log /bitnami/nginx/logs/oa.access.log;
error_log /bitnami/nginx/logs/oa.error.log;

location / {
proxy_pass http://192.168.100.103:8080/;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

server {
listen 80;
server_name mail.myweb.cn;
access_log /bitnami/nginx/logs/mail.access.log;
error_log /bitnami/nginx/logs/mail.error.log;

location / {
proxy_pass http://192.168.100.103:8081/;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#client_max_body_size 100m;
}
}
gamexg
2018-11-15 16:52:08 +08:00
我推荐 letsencrypt-nginx-proxy-companion
jmyz0455
2018-11-15 16:52:19 +08:00
@xiaomimei 第一种方案类似是这样吗?
server {
listen 80/do1;
server_name localhost:8001;
}
NicholasYX
2018-11-15 16:58:30 +08:00
nginx 反代
hack
2018-11-15 17:01:23 +08:00
11 is right
Midnight
2018-11-15 17:02:48 +08:00
用 nginx-proxy 反向代理,docker-compose 编排到一起,最后用 docker-compose up -d [image-name] 运行某一个或不指定
cuberlzy
2018-11-15 17:11:20 +08:00
关键词是反向代理。

原理就是只监听某一个端口(比如 80),根据你的 Host 头(也就是访问时的域名),指派到不同的配置上去,替你从这个端口请求数据,然后把响应数据返还给你。
Kyle18Tang
2018-11-15 17:55:25 +08:00
nginx 也用 docker 的,所有的应用放一个 network 里,这样也不需要暴露额外的端口,只需要暴露 nginx 的 80 和 443 就可以了。
jmyz0455
2018-11-16 10:47:00 +08:00
@vjnjc @neoblackcap 暂时先不用域名,第一个方案能通就用了
jmyz0455
2018-11-16 11:09:11 +08:00
@zgray
@sunny352787
@lllllliu
@1419co1in
@Liang
@gamexg
@NicholasYX
@Midnight
@cuberlzy
@Kyle18Tang
我配 ip:do1/ 代理 8001 是没问题的,但是 ip:do1/ 下面的请求,比如 ip:do1/test/ 请求到 ip:do1/demo/ 失败了,只会跳到 ip:do1/demo/,就是丢失了 d1/ 这个路径,有配过这个配置的么。

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

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

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

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

© 2021 V2EX