把前端开发的项目,用ng代理访问,前端基于antd+react
已打包到dist文件夹
1、启停操作:
nginx -s stop 快速关机
nginx -s quit 正常关机
nginx -s reload 重新加载配置文件
nginx -s reopen 重新打开日志文件
2、配置文件位置:
/usr/local/nginx/conf, /etc/nginx或 /usr/local/etc/nginx
3、ng可以服务静态资源和代理请求
服务静态资源
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
代理请求
server {
location / {
proxy_pass http://localhost:8080/;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
遇到的问题1:
Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused "container init exited prematurely".
解决方式:
1.卸载旧版本 docker
yum remove docker docker-common docker-selinux dockesr-engine -y
2.升级系统软件
yum upgrade -y
3.安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
4.添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.更新并安装 docker-ce
yum makecache fast yum install docker-ce -y
6.启动服务
systemctl daemon-reload systemctl restart docker
遇到的问题2:
升级成功了docker,满心欢喜,结果: Cannot restart container d387c3101a2b: no such runtime 'docker-runc'
解决方式:
grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g' systemctl restart docker
遇到的问题3:
Unable to find image,明明有啊!!!
更新了镜像源,发现:
遇到的问题4:
Failed to start Docker Application Container Engine.
解决方式:
重新修改镜像源:
原来为:{"insecure-registries":["公司私有地址", "http://hub-mirror.c.163.com", "https://hub.docker.com/"]}
修改为:{"registry-mirrors":["公司私有地址", "http://hub-mirror.c.163.com", "https://hub.docker.com/"]}
猜想,有可能是升级过后,docker的加速配置变更了。
遇到的问题5:
其实就是问题3并未解决,然后看了看ng的日志
docker logs id
英语不好,大概领会到是没有挂载ng的宿主机的日志目录
于是docker run的时候加上了日志目录
解决方式:
docker run --name myNG -v /zab/nginx/nginx.conf:/etc/nginx/nginx.conf -v /zab/nginx/log:/etc/nginx/log -d nginx:1.17.9
还是翻车了,没得端口映射
1、docker pull nginx:1.17.9
具体版本信息,可到https://hub.docker.com/_/nginx?tab=description查看
2、docker run 这里很关键,这个run,怎么个run法??
加上端口映射,还是继续翻车:
思考1:可能自己创建的文件夹,没有赋予权限
执行:
chmod 777 file
过后,发现不是这个问题
思考2:可能是ng配置文件的问题
配置是有问题,并且启动方式也有问题,ng挂载目录需要三个:
1、配置文件
2、日志
3、静态资源
所以最终的docker run是这样的:
docker run --name myNG -p 8083:80 -v /zab/nginx/nginx.conf:/etc/nginx/nginx.conf -v /zab/nginx/log:/etc/nginx/log -v /zab/nginx/static:/home -d nginx:1.17.9
这里把docker容器的home文件夹当做静态资源目录,映射出来
配置文件是这样的:
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 118.24.232.124:80;
#server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
#keepalive_requests 120; #单连接请求上限次数。
listen 80; #监听端口
server_name 118.24.232.124; #监听地址
include /etc/nginx/default.d/*.conf;
#location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
location / {
root /home; #根目录
index index.html index.htm; #设置默认页
#proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
}
}
}
最需要注意的是,这个[root /home]应该配置容器的地址,而不是挂载出来的宿主机的地址!!!