如何在 Windows 下使用 Docker 启动和访问不同 URL 下的 2 个不同 Web 服务器?

How to start and access under Windows 2 different Webserver under different URL using Docker?

我已经为 Windows 安装了 Docker 并且可以启动网络服务器 (nginx)。 我正在使用 Docker 版本:18.06.1-ce-win73 (19507) 和 Windows 版本:10.0.16299 Enterprise。

现在我可以在主机 OS (windows) 的浏览器中访问“http://localhost/” 网络服务器。

我想做的是:

使用 docker 启动 2 个网络服务器(webA[nginx] 和 webB[apache])并通过主机浏览器访问它们。 我想要例如“http://webA" to access webA and "http://webB”访问 webB。

我试图给容器不同的 IP 并使用主机文件,但它没有用。就像我在下面读到的:https://docs.docker.com/docker-for-windows/networking/#i-cannot-ping-my-containers 无法绑定 无法将 IP 绑定到 windows 下的容器。

现在我尝试在我启动 linux 的 VMWare 中使用 docker 但恕我直言,这种方法似乎有点沉重。

如何实现?

您必须为 2 个服务使用两个不同的端口。

你运行你的nginx容器喜欢

docker run --name some-nginx -d -p 80:80 some-content-nginx

然后 运行 apache 喜欢

docker run -dit --name my-apache -p 8080:80 my-apache2

结果是您在 http://localhost:80 and apache on http://localhost:8080.

上获得了一个 nginx

如果你想要http://webA.yourdomain.com,你将不得不在你的主机上配置虚拟主机,或者使用像traefik这样的代理。

Start 2 webserver(webA[nginx] and webB[apache]) using docker and access them trough the host browser. I would like to have e.g. "http://webA" to access webA and "http://webB" to access webB.

为了让所有站点都在一个端口上工作,可以使用一个网络服务作为代理。 这是 docker-compose 文件的示例:

version: '3'
services:
  nginx_siteA: 
    image: nginx:latest
    container_name: nginx_siteA
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80
# all other stuff 
...

  apache_siteB:
    image: httpd:latest
    container_name: httpd_siteB
# all other stuff 
...

因此,在此示例中配置了 2 个 Web 服务,并且可以通过 docker 网络相互访问(您可以从 nginx ping or/and curl apache,反之亦然)。但是从机器主机 - 你只能使用 80 端口访问 nginx。 P.S。 nginx_siteAapache_siteB 是服务名称,可以在配置文件中将它们用作域名(主机名)

并配置 nginx 直接与 siteA 和代理 SiteB 一起工作,如:

server {
    server_name siteA;
    # all other stuff   
    ......
}
server {
    server_name siteB;
    location /{
      proxy_pass http://apache_siteB;
    }
# all other stuff 
....
}

或者,以同样的方式使用apache容器: 安装 mod_proxy 并在 Apache domain.conf 文件中添加到 VirtualHost 块指令:ProxyPass / http://nginx_siteA/