Ser*_*hin 2 linux macos nginx web docker
我想使用 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
Run Code Online (Sandbox Code Playgroud)
在当前目录中,我有 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
}
Run Code Online (Sandbox Code Playgroud)
和 docker.dev 文件夹,其中包含 index.html 文件。
同样在我的主机 OSX 系统上的 /etc/hosts 中,我有:
192.168.99.100 docker.dev
Run Code Online (Sandbox Code Playgroud)
但是当我在浏览器中访问http://192.168.99.100:8080 时,我得到的是默认的 nginx 页面,而不是我的 index.html
我可以通过将 index.html 文件放在 /usr/share/nginx/html 文件夹中来实现所需的结果。但我想弄清楚如何调整自己的 Web 根位置。
您使用的配置文件位置不正确。如官方 nginx 镜像的readme 所述,配置文件的位置是/etc/nginx/nginx.conf
,所以你应该使用;
-v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro
Run Code Online (Sandbox Code Playgroud)
对于配置文件。
鉴于您将只在容器中为单个网站提供服务,您甚至不必在虚拟主机中指定域名(到达 nginx 容器的任何请求都应针对该域)。
通常,我建议为您要运行的每个域/网站使用专用容器。要在单个 docker 机器上为多个网站(因此,多个容器)提供服务,您可以:
使用端口映射;每个容器都发布在主机的不同端口上(-p 8080:80
对于网站“A”,-p 8081:80
对于网站“B”)
使用代理容器。这可能是一种更好的方法;您像往常一样运行您的网站容器,但不要发布它们的端口。因此,这些容器不可公开访问。您不是直接发布端口,而是运行代理服务器,根据域名将流量转发到正确的容器。
基于域名的转发需要一些配置。但是,有一种方便的方法可以全自动执行此操作。jwilder/nginx-proxy是一个 nginx 代理服务器,旨在运行在 Docker 容器中;您需要做的就是运行该容器,并授予它访问 docker API 的权限。
随后,启动您的网络服务器容器,但在它们上设置一个环境变量,指定它们服务的域(例如-e VIRTUAL_HOST=www.example.com,example.com
)。
nginx-proxy 容器侦听“docker 事件”,并自动生成配置以将流量转发到正确的容器。
如果您的 DNS(或/etc/hosts
)设置正确,您现在只需访问http://www.example.com并查看该网站。
归档时间: |
|
查看次数: |
12405 次 |
最近记录: |