首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自定义vhost在docker中运行nginx

问使用自定义vhost在docker中运行nginx
EN

Stack Overflow用户
提问于 2016-01-22 06:37:04
回答 1查看 13.6K关注 0票数 2

我想用docker机器在OSX上运行基本的nginx容器。

我运行以下代码:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
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中,我有:

代码语言:javascript
复制
192.168.99.100 docker.dev

但是当我在浏览器中访问http://192.168.99.100:8080时,我得到的是默认的nginx页面,而不是我的index.html

我可以通过将index.html文件放在/usr/share/nginx/html文件夹中来达到预期的效果。但是我想知道如何为web root调整我自己的位置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-22 13:47:35

nginx.conf的位置不正确

您使用的配置文件位置不正确。正如在readme for the official nginx image上所描述的,配置文件的位置是/etc/nginx/nginx.conf,因此您应该使用;

代码语言:javascript
复制
-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,即可查看该网站。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34935695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档