在DockerHub搜 nginx,第一个就是官方镜像库,这里使用1.27.2版本演示
1.下载镜像
docker pull nginx:1.27.2
2.测试运行
docker run --name nginx -p 9090:80 -d nginx:1.27.2
这里绑定了宿主机的9090端口,只要访问宿主机的9090端口,就会转发到docker nginx的80端口上。
3.把 nginx.conf文件拷贝出来
docker cp 504b691dc5f9:/etc/nginx/nginx.conf ~/server/conf/
4.停掉并删除当前容器
docker stop 504b691dc5f9
docker rm 504b691dc5f9
5.重新运行docker,把conf文件和日志目录绑定到docker上
Note:自己在wsl2子系统/home下创建/server/conf /server/log 文件夹
docker run -p 9090:80 --name nginx -v ~/server/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/server/log:/var/log/nginx -d nginx:1.27.2
更新2:
docker中的nginx转发至另一个nginx的fastapi服务
2.1 为了避免nginx转发后,fastapi的api文档打不开,或者当有多个服务运行的时候,nginx配置api文档路径冲突,那么可以在fastapi中重新显示的配置文档地址,如下:
mROOT_URL= "/sql/user"
app = FastAPI(title="MS User Database Service",version="1.0.0",docs_url=f"{mROOT_URL}/docs",redoc_url=f"{mROOT_URL}/redoc",openapi_url=f"{mROOT_URL}/openapi.json",lifespan=lifespan)
2.2 打包dockerfile,生成fastapi的docker镜像
docker image build -t fastapi_test:v01 .
例如我编译了一个名为fastapi_test:v01的镜像
2.3 运行docker:
docker run --name v_fastapi_test -p 7000:7000 -d fastapi_test:v01
检查可以正常通过7000端口打开文档
2.4 修改拷贝出来的nginx.conf文件
user nginx;
worker_processes auto;error_log /var/log/nginx/error.log notice;
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;# comment this line , because it will load other sub-fule#include /etc/nginx/conf.d/*.conf;server {listen 80; # protserver_name localhost; # listening address# nginx default address, using for nginx deployment testlocation / {root /usr/share/nginx/html;index index.html index.htm;}location /sql/user {proxy_pass http://host.docker.internal:7000;proxy_http_version 1.1;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;expires -1;}}
}
首先注释掉#include /etc/nginx/conf.d/*.conf; 不然加载的默认子文件会覆盖端口造成WARNING
添加server部分,这个可以用来验证nginx部署启动完成
转发到fastapi的7000端口,这里使用host.docker.internal来表示宿主机,因为宿主机已经映射了7000端口到fastapi的docker了,使用1.1的版本。
2.5 运行nginx的docker
docker run -p 80:80 --name nginx_test -v ~/server/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/
server/log:/var/log/nginx -d nginx:1.27.2
将宿主机的80端口映射到docker中的80端口,绑定wsl2中的nginx.conf文件到docker中,这样默认就会被宿主机的配置文件覆盖,绑定log文件夹。
2.6 测试,如下图,看到转发成功