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

How to set up a simple docker-contained reverse-proxying (nginx) server?

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

我的挑战是拥有 3 个不同的 docker 容器。一个npm repo container, a bower container (Link in comment 1), and controlled by a nginx container。 npm repo 和 bower 必须能够访问相同的 IP 地址但在不同的端口下,并且可以通过特殊名称访问,例如 bower.swig.swag.npm.swig.swag。端口处理将由 nginx 容器处理,并反过来让任何希望在 IP 地址上访问的容器附加 VIRTUAL_HOST=--env 标志(如 docker nginx 上的信息 link)。

因此 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 都有效,删除后,它没有。我得到了一个 link 到评论 2 中的错误。愚蠢的 link 规则。) 如果我没记错的话,Nginx 是针对本地主机的。关闭端口 80:80。

我不记得我使用的确切标志,但这里有一些可能的标志,我需要 运行 和 docker。他们是

的混合体
docker run 
-p, --dns=, --env=VIRTUAL_HOST=, -h, --expose

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

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

nginx docker information 包含有关 --env=VIRTUAL_PORT= 的信息。这用于在 nginx 服务器下使用不同的端口。当与 --env=VIRTUAL_HOST= 结合使用时,这允许将别名绑定到端口号后面的 ip 地址。因此,在 URL 搜索栏中输入虚拟主机名称可以让您快速 link 到它后面的 ip 和端口。

除了在 docker 运行 中指定外,还必须修改 vim/vi /etc/hosts 文件以包含您要 link 的别名。就个人而言,这似乎效率低下,因为我宁愿 docker 设置其容器规范而不是我自己。 None less,这里IP和端口的格式如下...

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

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

所以回顾一下,docker 必须 运行 因为 docker run --env=VIRTUAL_HOST=*alias* --env=VIRTUAL_PORT=*port* -p *IP*:*port*:*ContainerPort* *image* 对于任何您希望 运行 关闭 docker 包含的 nginx 服务器的容器。 /etc/hosts 的 vim/vi 文件必须键入

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