我想用docker机器在OSX上运行基本的nginx容器。
我运行以下代码:
docker pull nginx
docker run -d -i -t \
-p 8080:80 \
-v $(pwd)/vhost.conf:/etc/nginx/sites-enabled/vhost.conf \
-v $(pwd)/docker.dev:/var/www/docker.dev nginx在当前目录中,我有vhost.conf文件:
server {
listen 80;
index index.html;
server_name docker.dev;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log
root /var/www/docker.dev
}和包含index.html文件的docker.dev文件夹。
另外,在我的主机OSX系统的/etc/hosts中,我有:
192.168.99.100 docker.dev但是当我在浏览器中访问http://192.168.99.100:8080时,我得到的是默认的nginx页面,而不是我的index.html
我可以通过将index.html文件放在/usr/share/nginx/html文件夹中来达到预期的效果。但是我想知道如何为web root调整我自己的位置。
发布于 2016-01-22 13:47:35
nginx.conf的位置不正确
您使用的配置文件位置不正确。正如在readme for the official nginx image上所描述的,配置文件的位置是/etc/nginx/nginx.conf,因此您应该使用;
-v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro用于配置文件。
假设你的容器中只有一个网站,你甚至不需要在你的虚拟主机中指定域名(任何到达nginx容器的请求都应该是针对那个域的)。
为多个域名服务
一般来说,我建议对你想运行的每个域/网站使用一个专用的容器。要在一台docker机器上服务多个网站(即多个容器),您可以选择以下两种方式之一:
使用端口映射;每个容器发布在主机中的不同端口(网站A的-p 8080:80,网站B的-p 8081:80 )
使用代理容器。这可能是一种更好的方法;您可以像往常一样运行您的网站容器,但不会发布它们的端口。因此,这些容器无法公开访问。不是直接发布端口,而是运行一个代理服务器,根据域名将流量转发到正确的容器。
基于域名的转发需要一些配置。然而,有一种方便的方法可以完全自动地完成这项工作。jwilder/nginx-proxy是一个nginx代理服务器,专为在Docker容器中运行而设计;您需要做的就是运行该容器,并为其提供对docker API的访问。
随后,启动您的set服务器容器,但在它们上设置一个环境变量来指定它们服务的域(例如-e VIRTUAL_HOST=www.example.com,example.com)。
nginx-proxy容器监听"docker事件“,并自动生成将流量转发到正确容器的配置。
如果您DNS (或/etc/hosts)设置正确,您现在只需访问http://www.example.com,即可查看该网站。
https://stackoverflow.com/questions/34935695
复制相似问题