[英]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映像的自述文件所述,配置文件的位置为/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.