如何在 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_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
块指令:ProxyPass / http://nginx_siteA/
我已经为 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_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
块指令:ProxyPass / http://nginx_siteA/