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

如何使用Docker在Windows 2下启动和访问不同URL下的不同Web服务器?,docker,windows-10,vmware-workstation,Docker,Windows 10,Vmware Workstation,我已经安装了Docker for Windows,可以启动Web服务器(nginx)。 我使用的是Docker版本:18.06.1-ce-win73(19507)和Windows版本:10.0.16299 Enterprise 目前,我可以在Web服务器“”下的主机操作系统(windows)的浏览器中访问 我想做的是: 使用docker启动2个Web服务器(webA[nginx]和webB[apache]),并通过主机浏览器访问它们。 我想让例如“”访问webA和“”访问webB 我试图给容器提

我已经安装了Docker for Windows,可以启动Web服务器(nginx)。 我使用的是Docker版本:18.06.1-ce-win73(19507)和Windows版本:10.0.16299 Enterprise

目前,我可以在Web服务器“”下的主机操作系统(windows)的浏览器中访问

我想做的是:

使用docker启动2个Web服务器(webA[nginx]和webB[apache]),并通过主机浏览器访问它们。 我想让例如“”访问webA和“”访问webB

我试图给容器提供不同的IP地址,并使用了主机文件,但没有成功。就像我在下面读到的:不可能绑定它不可能将IP绑定到windows下的容器

现在我尝试在VMWare中使用docker,在那里我启动了一个linux,但我觉得这种方法有点沉重


如何做到这一点

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

您可以像这样运行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
结果是您在上获得了nginx,在上获得了apache


如果需要,您必须在主机上配置vhost,或者使用代理,如
traefik

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

您可以像这样运行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
结果是您在上获得了nginx,在上获得了apache

如果需要,您必须在主机上配置vhost,或者使用类似
traefik
的代理

使用docker启动2个Web服务器(webA[nginx]和webB[apache]),并通过主机浏览器访问它们。我想让例如“”访问webA和“”访问webB

为了让所有站点在一个端口上工作,可以使用一个Web服务作为代理。 以下是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或/和curl apache,也可以通过nginx ping或/和curl apache)。但是从主机-您只能使用80端口访问nginx。 P.S.
nginx_siteA
apache_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
block指令:
ProxyPass/http://nginx_siteA/

使用docker启动2个Web服务器(webA[nginx]和webB[apache]),并通过主机浏览器访问它们。我想让例如“”访问webA和“”访问webB

为了让所有站点在一个端口上工作,可以使用一个Web服务作为代理。 以下是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或/和curl apache,也可以通过nginx ping或/和curl apache)。但是从主机-您只能使用80端口访问nginx。 P.S.
nginx_siteA
apache_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
block指令:
ProxyPass/http://nginx_siteA/

您需要为第二个nginx容器使用不同的端口,但Web服务器将通过相同的端口进行通信,因此我需要不同的URL,或者我弄糟了什么?你需要为不同的web服务器配置一个nginx:
服务器{listen 80;server_name webA;..}服务器{listen 80;server_name webB;..}
@malyy好主意,但其中一个使用apache2其他nginx。。。我更改了问题以澄清您需要为第二个nginx容器使用不同的端口,但web服务器将通过相同的端口进行通信,因此我需要不同的URL,还是我搞糟了?您需要为不同的web服务器配置一个nginx:
server{listen 80;server_name webA;..}server{listen 80;server_name webB;…}
@malyy好主意,但其中一个使用apache2其他nginx…为了让问题更清楚,我更改了问题