nginx/apache vps 上 docker 容器输出端口的重定向

nginx/apache redirection for output port on docker container on vps

我是 docker 容器管理员中的 linux 菜鸟,在 VPS 上使用 apache 或 nginx。

我使用 OVH 经典 Vps(4go ram,25Go SSD)和已安装的映像 ubuntu 15.04 + docker。

docker 容器的安装非常简单,在我的例子中,我安装图像 sharelatex.

没有问题
docker run -d \
  -v ~/sharelatex_data:/var/lib/sharelatex \
  -p 5000:80 \
  --name=sharelatex \
  sharelatex/sharelatex

站点可以通过 VPS 的 IP 地址在 http://51.255.47.40:5000 端口访问表明站点工作没有任何问题。

我已经有一个子域 (tools.sebastienreycoyrehourcq.fr) 配置为在服务器 ip vps 上运行(51.255.47.40 在 webfaction 面板中路由到外部),不工作,不要明白为什么。

我在 51.255.47.40 上安装了一个 apache 服务器,但我想最好的选择可能是安装 nginx 或 apache 的 docker 映像?在这一点上你能给我建议吗?在那之后,我如何重定向到链接到我的子域的 apache 或 nginx 的经典 80 端口上的 docker 图像的 5000 端口?

nginx-proxy (https://github.com/jwilder/nginx-proxy) 然后 运行 sharelatex 与 VIRTUAL_HOST 设置为 tools.sebastienreycoyrehourcq.fr 应该足以让这个工作。

例如

docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy

接着是

docker run -d \
-e VIRTUAL_HOST=tools.sebastienreycoyrehourcq.fr \
-v ~/sharelatex_data:/var/lib/sharelatex \
-p 5000:80 \
--name=sharelatex \
sharelatex/sharelatex

子域 tools.sebastienreycoyrehourcq.fr 配置不正确。它无法解析为任何 IP 地址,这就是它不起作用的原因。

配置子域后,您可以使用以下命令运行端口 80 上的 sharelatex 容器:

docker run -d \
  -v ~/sharelatex_data:/var/lib/sharelatex \
  -p 80:80 \
  --name=sharelatex \
  sharelatex/sharelatex

这样您就可以在 http://tools.sebastienreycoyrehourcq.fr

访问该应用程序

以前的答案可能涵盖了大部分问题,尤其是当您的域名存在重定向问题时。

为了完全可移植并利用 docker 的所有可能性,我的建议是使用 Nginx 官方 docker 图像并使其成为唯一可从外部访问的图像(使用端口的开放)并使用 --link 来管理 Nginx 容器和其他容器之间的连接。

我在类似的情况下做过,效果很好。以下是我对你的情况所做的初步翻译。

您在未指定任何外部端口的情况下启动共享乳胶容器:

docker run -d \
  -v ~/sharelatex_data:/var/lib/sharelatex \
  --name=sharelatex \
  sharelatex/sharelatex

您为您放置在 $HOME/nginx/conf 中的 shareLatex 服务器准备了一个 nginx conf 文件,它看起来像

upstream sharelatex {
     # this will refer to the name you pass as link to the nginx container
     server sharelatex; 
}

server {
        listen 80;
        server_name tools.sebastienreycoyrehourcq.fr;
        location  ^~ / {
              proxy_pass http://sharelatex/;
        }
}

然后使用适当的卷链接和容器链接启动 nginx docker 容器:

docker run -d --link sharelatex:sharelatex --name NginxMain -v $HOME/nginx/conf:/etc/nginx/sites-available -v -p 80:80 kekev76/nginx

ps :这是用我们自己的 kekev76/nginx 图像完成的,即 public 在 github 和 docker 上,但您可以调整原理以适应官方 nginx 镜像。