- docker nginx :https://hub.docker.com/_/nginx
- 根据 nginx load balancing: http://nginx.org/en/docs/http/load_balancing.html , 我们得到了nginx.conf的,根据自己的需求做相应的更改。
http {
upstream myapp1 {
server localhost:8080;
server localhost:8081;
server localhost:8082;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
- 运行docker命令:
docker run --name my-custom-nginx-container --restart=always -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
。 - 这时发现nginx并没有成功启动,使用
docker logs
查看,得到以下的错误信息:
- 要解决这个问题很简单,只需要在上述nginx.conf配置文件中,http前加上events{}。
- 此时访问localhost还是不能成功,使用
lsof -i:80
查看是否有进程监听80端口,答案是没有的。这是因为我们在docker中启动nginx时,没有给它指定端口,所以我们加上 -p 参数。docker run --name my-custom-nginx-container --restart=always -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d -p 80:80 nginx
。 -
再次访问localhist,不幸的是又有了新的错误:
-
docker logs
查看错误信息:
- 显然,我们忘记了docker容器内部与宿主机是完全隔离的,我们根本无法访问localhost,于是我们需要将localhost改成局域网内的ip地址。
events{}
http {
upstream myapp1 {
server 192.168.0.128:8080;
server 192.168.0.128:8081;
server 192.168.0.128:8082;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
- 此时已经可以成功访问了。
网友评论