【问题标题】:Put different containers containing a server in the same server将包含服务器的不同容器放在同一服务器中
【发布时间】:2017-10-24 12:50:08
【问题描述】:

我有一个 Debian 服务器,上面有 apache2。我可以通过IP地址访问它。

我想要的是能够通过“myIpAddress/container1”之类的 url 从外部访问其中的容器(包含 apache2 服务器)。我目前只能从 Debian 服务器访问这些容器。

我考虑过使用反向代理,但我无法让它工作。

感谢您的帮助! :-)

【问题讨论】:

  • 您只是想通过 IP 地址从外部访问 docker 容器内的网络服务器吗?

标签: apache docker debian reverse-proxy


【解决方案1】:

将 docker 容器的端口映射到主机端口并从 <host-ip>:port 访问 docker 容器。

docker run -p host-port:container-port image

例如,在运行容器时,使用上述命令将使容器在 127.0.0.1 可用

 docker run -p 80:5000 training/webapp

更新:

使用 NGINX 设置反向代理

此示例使用普通 NGINX 容器作为站点 A,使用普通 Apache 服务器作为站点 B。

  1. 运行反向代理。

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

  2. 启动站点 A 的容器,在 VIRTUAL_HOST 变量中指定域名。

    docker run -d --name site-a -e VIRTUAL_HOST=a.example.com nginx

  3. 通过http://a.example.com查看您的网站。

  4. 在站点 A 仍在运行的情况下,启动站点 B 的容器。

    docker run -d --name site-b -e VIRTUAL_HOST=b.example.com httpd

  5. http://b.example.com查看站点 B。

注意:确保您已设置 DNS 以将子域转发到运行 nginx-proxy 的主机。如果您使用 AWS,最简单的方法是使用 Route53。

对于本地测试,通过在 /etc/hosts 文件中添加条目来映射子域以解析到本地主机。

127.0.0.1    a.example.com

127.0.0.1    b.example.com

参考文献

  1. jwilder NGNIX Proxy Github

  2. NGNIX reverse proxy using docker

【讨论】:

  • 我想使用一个 url 来访问我的容器。像 myIpAdress/container1 这样的网址
  • docker run -p host-port:container-port image 会让你这样做。检查更新的答案。
  • 就像你在回答中所说的那样,我只能通过 :port 之类的 url 访问我的容器。我不想放置端口,只有 URL 中的不同参数重定向到 :port
  • 如果你有一个容器,你可以将容器端口绑定到主机端口 80 并使用 ip 访问容器,因为 80 是默认的 http 端口。对于多个容器,您需要有某种前端代理来接收请求并根据 url 将其转发到正确的容器。 (ip/container1) Nginx 作为前端代理是个不错的选择。如果您使用的是 aws/gcp,负载均衡器可以为您执行此操作。
  • 检查更新的答案。它使用github.com/jwilder/nginx-proxy 在 docker 容器之间设置代理。\
猜你喜欢
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 2020-08-10
  • 2014-01-05
  • 2011-09-13
  • 1970-01-01
相关资源
最近更新 更多