将包含服务器的不同容器放在同一台服务器中

Put different containers containing a server in the same server

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

我想要的是能够通过像 "myIpAddress/container1" 这样的 url 从外部访问其中的容器(其中包含一个 apache2 服务器)。我目前拥有的是只能从 Debian 服务器访问这些容器。

我考虑过使用反向代理,但我无法实现。

感谢您的帮助! :-)

将 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