如何设置一个简单的 docker 包含反向代理(nginx)服务器?

如何设置一个简单的 docker 包含反向代理(nginx)服务器?

从技术上讲,我不应该问这个问题,因为我已经能够成功完成它,但是我没有记录任何笔记/发现,并且我被迫删除它所在的 centos VM,因为它无法正常启动。所以现在它很乱,需要记住我做了什么。

对我来说,挑战是拥有 3 个不同的 Docker 容器。npm repo 容器,一个 bower 容器(链接见评论 1),以及由 nginx 容器控制. npm repo 和 bower 必须能够访问相同的 IP 地址,但使用不同的端口,并且可以通过特殊名称进行访问,例如bower.swig.swag。或者npm.swig.swag。端口处理将由 nginx 容器负责,并且会让任何希望在 IP 地址上访问的容器附加标志--envVIRTUAL_HOST=如 nginx 链接上的 docker 信息所述)。

因此,npm 容器和 bower 容器所需的 IP 分别是 10.1.10.1 端口 8080:8080 和 5678:5678。我认为 DNS 服务器是 10.1.10.30,或者它基于本地主机,但目前我不确定,因为我尝试提供的几乎所有 IP(本地主机 127.0.0.1 和 10.0.2.15 除外)都与该docker run -p标志不相关(我不知道为什么会发生这种情况。前一分钟,我提供给 docker 的任何 ip 都可以使用,但删除它之后就不行了。我在评论 2 中得到了指向此错误的链接。愚蠢的链接规则。)如果我没记错的话,Nginx 的目标是本地主机。关闭端口 80:80。

我不记得我使用了哪些具体的标志,但这里有一些我在运行 docker 时可能需要的标志。它们包括

docker run 
-p, --dns=, --env=VIRTUAL_HOST=, -h, --expose

当我们为容器指定虚拟主机时,我们还必须修改 vim/vi 文件中的某些内容,/etc/hosts但我记不清应该如何添加它。最后,有人应该能够获取指定的虚拟主机名,进入浏览器的 http 栏并输入,http://virtualhostname然后被授予访问网站的权限。这就是我知道它正在工作的方式。有人能让我回到正轨吗?(也会将此发布到 stack overflow。我真的无法平衡使用哪个网站,所以我可能会这样做。)

答案1

尽管 IP 问题仍然存在(根据 nmap,几乎我的所有 IP 都被过滤了,目前无法解决这个问题),我仍然能够成功重新创建我在本地主机上所做的事情。

nginx docker 信息包含有关 的信息--env=VIRTUAL_PORT=。这用于在 nginx 服务器上运行不同的端口。与 结合使用时--env=VIRTUAL_HOST=,这允许将别名绑定到端口号后面的 IP 地址。因此,在 URL 搜索栏中输入虚拟主机名可以快速链接到其后的 IP 和端口。

除了在 docker run 中指定这一点之外,还/etc/hosts必须修改 vim/vi 文件以包含要将别名链接到的端口和 IP 地址。就我个人而言,这似乎效率不高,因为我宁愿让 docker 设置其容器规范,而不是我自己设置。尽管如此,其中的 IP 和端口格式如下...

IP ADDRESS   alias1 alias2 alias3 alias4...
::PORT   aliasToPort
::PORT   2ndAliasToPort

因此,对于特定的 IP 地址,它可能接受各种别名,并且可以进一步指定从哪个端口访问特定别名。

docker run --env=VIRTUAL_HOST=*alias* --env=VIRTUAL_PORT=*port* -p *IP*:*port*:*ContainerPort* *image*总结一下,对于任何你希望从 docker 运行的容器,docker 必须像 nginx 服务器一样运行。并且 vim/vi 文件/etc/hosts必须输入为

*IP*   *alias*
::*PORT*   *aliasToPort*

相关内容