前提条件:已安装 docker
- 下载镜像
docker pull nginx
- 运行
docker run -p 80:80 -d docker.io/nginx
- 检查允许情况
curl http://127.0.0.1
- 先停止指令
docker ps -a
docker stop {imagesId}
docker rm {imagesId}
- 在宿主机上创建需要挂在的新建文件夹
mkdir -p /data/nginx/{conf, conf.d,html,logs}
- 新建配置文件
vim /data/nginx/conf/nginx.conf
- 示例
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
- 新建配置文件
vim /data/nginx/conf.d/default.conf
- 示例代码
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
autoindex on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
- 新建一个开始页面
vim /data/nginx/html/index.html
vim /data/nginx/html/50x.html
- 重新运行
docker run -p 80:80 -d -v
/data/nginx/html:/usr/share/nginx/html -v /data/nginx/logs:/var/log/nginx -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf.d:/etc/nginx/conf.d docker.io/nginx
注意事项:default.conf 实际上所指向的目录为容器中的真实路径,而容器中的真实路径挂载在宿主机的真实路径上。如以上配置中宿主机中/data/nginx/conf/nginx.conf -> 容器中的 /etc/nginx/nginx.conf 故,在配置文件 default.conf /usr/share/nginx/html 实际上指向的目标为 /data/nginx/html
2019-07-31补充:
nginx 在实际docker 部署中,需要用到文件上传下载时会出现 文件过大,文件权限不足无法下载的问题。
解决办法:当出现 413 request Entity too Large 时
在 nginx 中配置
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 1024m;
client_body_buffer_size 10m;
如果不能解决,在server 中 再配置一遍,笔者在conf.d 对应的 api.conf 做了配置
upstream xxx.com {
server 172.17.0.1:8082;
}
server {
listen 80;
# 关键部分
client_max_body_size 100m;
server_name xxx.com;
location / {
proxy_pass http://xxx.com;
}
}
解决完上传问题之后,通过ngixn 下载文件的时候又遇到了下载权限不足的问题,然后按照以往的习惯在配置文件中修改了 user ,发现不起作用,原因是docker 容器的权限不足以访问宿主机的文件。
重新启动 docker 带上权限 --privileged=true 可以解决。
# 找到ngixn容器
docker ps
# 停止容器
docker stop ngixn
# 删除容器
docker rm nginx
# 重新运行
docker run -d -p 80:80 --privileged=true -v /data/nginx/html:/usr/share/nginx/html -v /data/nginx/logs:/var/log/nginx -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf.d:/etc/nginx/conf.d docker.io/nginx
# reload
docker exec -i [nginx容器名/id] nginx -s reload
注意!
使用 docker 部署nginx 拿不到原始的ip地址,这个暂时没有办法解决.... 懂的朋友欢迎留言或者私信告知一下哦!
网友评论