docker run 安装nginx
1、拉取镜像
docker pull nginx
2、编写nginx配置文件
nginx.conf 文件内容:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#gzip on;
client_max_body_size 800m;
server {
listen 8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
location /api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE_HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
expires -1;
if_modified_since off;
add_header Last-Modified "";
add_header Cache-Control no-cache;
etag off;
# 反向代理配置,指向后端网关地址
proxy_pass http://127.0.0.1:8080/api/;
add_header Access-Control-Allow-Methods *;
#预检命令的缓存,如果不缓存每次会发送两次请求
add_header Access-Control-Max-Age 3600;
# 带cookie请求需要加上这个字段,并设置为true
add_header Access-Control-Allow-Credentials true;
# 表示允许这个域跨域调用(客户端发送请求的域名和端口)
# $http_origin动态获取请求客户端请求的域 不用*的原因是带cookie的请求不支持*号
add_header Access-Control-Allow-Origin $http_origin;
# 表示请求头的字段 动态获取
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
# OPTIONS预检命令,预检命令通过时才发送请求
# 检查请求的类型是不是预检命令
if ($request_method = OPTIONS) {
return 200;
}
}
location / {
root /usr/local/nginx/html;
index index.html index.htm;
try_files $uri $uri/ @rewritesAdmin;
}
location @rewritesAdmin {
rewrite ^(.*)$ /index.html last;
}
root html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
error_page 404 /404.html;
location = /404.html {
root /usr/local/nginx/html;
}
}
}
3、启动容器
docker run -d -p 8080:8080 \
--name nginx \
-v ./nginx.conf:/etc/nginx/nginx.conf \
-v ./logs:/var/log/nginx \
-v ./html:/usr/local/nginx/html \
-e TZ=Asia/Shanghai \
--restart always \
-d nginx
参数说明
-name 给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器
-p 映射端口,将docker宿主机的80端口和容器的80端口进行绑定
-v 挂载文件用的,
-e TZ=Asia/Shanghai 设置时区
第一个-v 表示将你本地的nginx.conf覆盖你要起启动的容器的nginx.conf文件,
第二个-v 表示将日志文件进行挂载
第三个-v 表示的和第一个-v意思一样的。
-d 表示启动的是哪个镜像
4、测试容器是否启动成功
-
先查看nginx容器是否启动成功
docker logs -f nginx
-
查看http能否访问
curl 127.0.1.1:8080
-
查看nginx 报错日志
cat logs/error.log
5、修改nginx配置文件和重启nginx
-
修改配置文件后需要删除容器后再重新启动
docker rm -f nginx docker run ...
-
直接重启nginx容器
docker restart nginx