繁体   English   中英

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

[英]Run nginx in docker with custom vhost

我想在带有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根目录位置。

nginx.conf的位置不正确

您为配置文件使用了错误的位置。 官方nginx映像自述文件所述,配置文件的位置为/etc/nginx/nginx.conf ,因此应使用;

-v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro

对于配置文件。

假设您只在容器中提供一个网站,您甚至不必在虚拟主机中指定域名(到达nginx容器的任何请求都应针对该域)。

服务多个域

通常,我建议为要运行的每个域/网站使用专用的容器。 要在单个docker机器上服务多个网站(因此,多个容器),您可以:

使用端口映射; 每个容器都发布在主机的其他端口上(网站“ A”为-p 8080:80 -p 8081:80 ,网站“ B”为-p 8081:80

使用代理容器。 这可能是更好的方法。 您像往常一样运行网站容器,但发布其端口。 因此,这些容器是无法公开获得的。 您可以运行代理服务器,而不是直接发布端口,而是根据域名将流量转发到正确的容器。

基于域名的转发需要一些配置。 但是,有一种方便的方法可以完全自动执行此操作。 jwilder / nginx-proxy是nginx代理服务器,旨在在Docker容器中运行; 您所需要做的就是运行该容器,并为其提供对Docker API的访问权限。

随后,启动您的Web服务器容器,但是在它们上设置一个环境变量,以指定它们服务的域(例如-e VIRTUAL_HOST=www.example.com,example.com )。

nginx-proxy容器侦听“ docker事件”,并自动生成配置以将流量转发到正确的容器。

如果您的DNS(或/etc/hosts )设置正确,则现在只需访问http://www.example.com并查看该网站。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM