1.安装nginx docker镜像

获取nginx官方镜像 


docker pull nginx

Docker Nginx反向代理转发内网端口_nginx

查看镜像库


docker images

Docker Nginx反向代理转发内网端口_docker_02

使用nginx镜像来创建nginx容器实例


docker run --name nginx_my -p 80:80 -d


run 创建容器实例

-- name 容器命名

-v 映射目录

-d 设置容器后台运行

-p 本机端口映射 将容器的80端口映射到本机的80端口

语句最后一个nginx是使用镜像的名称

创建容器成功后,启动nginx容器

访问 本机测试   127.0.0.1:80

Docker Nginx反向代理转发内网端口_docker_03

 

2.将nginx关键目录映射到本机

首先在本机创建nginx的一些文件存储目录


mkdir -p /root/nginx/conf /root/nginx/logs



Docker Nginx反向代理转发内网端口_nginx_04

logs: nginx日志目录

conf: nginx配置文件目录

查看nginx_my容器id


docker ps



 

Docker Nginx反向代理转发内网端口_nginx_05

将nginx-test容器配置文件copy到本地


docker cp 4f54ae11387b:/etc/nginx/nginx.conf /root/nginx/conf



Docker Nginx反向代理转发内网端口_80端口_06

    

创建新nginx容器nginx-web并将logs,conf目录映射到本地


docker run -d -p 8899:80



3.设置反向代理

进入到/root/conf/nginx.conf 添加如下即可


server{
listen 80;
charset utf-8;
server_name _;

location / {
proxy_pass http://192.168.1.128:15672;
proxy_redirect default;
}
}



 

Docker Nginx反向代理转发内网端口_80端口_07

这样就可以用本机80端口代理本机15672端口了 

测试反向代理是否可用

直接使用80访问端口

 

4.踩过坑

1. docker运行nginx为什么要使用 daemon off
 

Docker 容器启动时,默认会把容器内部第一个进程,也就是pid=1的程序,作为docker容器是否正在运行的依据,如果 docker 容器pid=1的进程挂了,那么docker容器便会直接退出。

Docker未执行自定义的CMD之前,nginx的pid是1,执行到CMD之后,nginx就在后台运行,bash或sh脚本的pid变成了1。

所以一旦执行完自定义CMD,nginx容器也就退出了。

​Nginx的docker仓库仔细查看说明,其实是有说明的.​

Docker Nginx反向代理转发内网端口_80端口_08

将nginx容器停止后修改配置文件出现nginx启动不起来解决方式:


# 在命令后面添加 nginx-debug -g 'daemon off;'

docker run -d -p 8899:80 --name nginx_reverse -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx nginx nginx-debug -g 'daemon off;'



2. 修改配置文件后还是没有转发端口

这个可能是修改nginx配置文件后没有重启nginx, 需要重启nginx, 也就是重启docker nginx容器就可以


docker restart nginx_my