在自定义虚拟主机中运行docker中的nginx

我想用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

我可以通过在/ usr / share / nginx / html文件夹中放置index.html文件来达到预期的效果。 但我想弄清楚如何调整我自己的网站根目录。

nginx.conf的位置不正确

您正在使用configuration文件的位置不正确。 正如nginx官方的自述文件中/etc/nginx/nginx.conf ,configuration文件的位置是/etc/nginx/nginx.conf ,所以你应该使用;

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

对于configuration文件。

由于您只能在您的容器中提供单个网站,因此您甚至不必在虚拟主机中指定域名(任何到达nginx容器的请求都应该用于该域)。

为多个域提供服务

一般来说,我build议使用专门的容器来运行每个域名/网站。 要在一台docker机器上为多个网站(因此,多个容器)提供服务,您可以;

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

使用代理容器。 这可能是一个更好的方法; 像往常一样运行你的网站容器,但不要发布他们的端口。 那些容器是不公开的。 您不需要直接发布端口,而是根据域名运行将stream量转发到正确容器的代理服务器。

基于域名的转发需要一些configuration。 不过,有一个方便的方法来完成这个全自动的。 jwilder / nginx-proxy是一个nginx代理服务器,用于在Docker容器中运行; 所有你需要做的就是运行这个容器,并且允许它访问docker API。

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

nginx-proxy容器监听“泊坞窗事件”,并自动生成configuration,将stream量转发到正确的容器。

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

Interesting Posts