Windows或Mac配置Docker的Nginx挂载目录

在开发过程中,无法避免跨域这令人头疼的问题。往往我们解决跨域的方法有以下几种:

  • 反向代理
  • Server端配置任何域名都可以请求 (这很不安全啊)

在本次开发中,前端配合Socket.IO发送请求,但是在开启WebSocket功能后,会出现于这篇文章同样的问题,
但是目前还没有找到合适的解决方法(找到了的话请告诉我!)

所以一怒之下,打算配上反向代理,并结合Docker更方便多端开发部署环境,如有不对多多指教。
环境:windows10 / MacOS

首先在docker中拉下Nginx的镜像。可以采取最简单的办法(如果搜不到,请检查docker代理问题):
图片
或:

1
docker pull nginx:latest // (版本号,如果不写则为最新版本)

运行我们的Image

1
docker run --name Nginx -p 80:80 -d nginx:stable-perl

其中,我把该Image起名为Nginx,可以起别的名字,但是后面要记得统一,如:nginx、my-nginx等等。


确认是否正常安装

1
2
docker ps // 目前正在运行的镜像
docker ps -a // 电脑里所有存在的镜像

如果看到存在nginx的image则为正确安装:
图片


建立挂载关系,重要!

本地建立文件夹:我放在了一个config文件夹下:config/nginx
图片

将文件从docker内复制到宿主机当中
windows:

1
2
3
docker cp Nginx:/etc/nginx/nginx.conf D:/config/nginx/nginx.conf
docker cp Nginx:/etc/nginx/conf.d D:/config/nginx/conf/conf.d
docker cp Nginx:/usr/share/nginx/html D:/config/nginx/html

mac:

1
2
3
docker cp Nginx:/etc/nginx/nginx.conf /Users/yourUserName/config/nginx/nginx.conf
docker cp Nginx:/etc/nginx/conf.d /Users/yourUserName/config/nginx/conf/conf.d
docker cp Nginx:/usr/share/nginx/html /Users/yourUserName/config/nginx/html

这里表示:
Nginx:/etc/nginx/nginx.conf:镜像名为Nginx的文件
记住名字一定要统一,前面使用了my-nginx就要写成my-nginx:/etc/nginx/nginx.conf,地址一定要一一对应


完成后,将原本镜像移除并重装:
移除:

1
2
3
docker stop Nginx
docker rm Nginx
docker rm -f Nginx // 强制将当前运行的镜像移除

重装
windows:

1
2
3
4
5
6
7
docker run --name Nginx -p 80:80 ^
--add-host="host.docker.internal:host-gateway" ^
-v D:\config\nginx\nginx.conf:/etc/nginx/nginx.conf ^
-v D:\config\nginx\logs:/var/log/nginx ^
-v D:\config\nginx\html:/usr/share/nginx/html ^
-v D:\config\nginx\conf\conf.d:/etc/nginx/conf.d ^
--privileged=true -d nginx:stable-perl

mac:

1
2
3
4
5
6
7
8
9
docker run \
-p 80:80 \
--name nginx \
-v /Users/yourUserName/config/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/yourUserName/config/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /Users/yourUserName/config/nginx/logs:/var/log/nginx \
-v /Users/yourUserName/config/nginx/html:/usr/share/nginx/html \
--privileged=true \
-d nginx:latest

大功告成!