如何使用Docker在Windows 2下启动和访问不同URL下的不同Web服务器?
我已经安装了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,但我觉得这种方法有点沉重如何使用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 我试图给容器提
如何做到这一点 您必须为两个服务使用两个不同的端口 您可以像这样运行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…为了让问题更清楚,我更改了问题