Docker部署nginx域名配置及一些问题记录
[TOC]
Jenkins安装及项目部署可以看上一篇文章
安装nginx
1、这里我们拉取官方的最新版本的镜像:
$ docker pull nginx:latest
2、查看本地镜像
使用以下命令来查看是否已安装了 nginx:
$ docker images
在上图中可以看到我们已经安装了最新版本(latest)的 nginx 镜像。
3、运行容器
安装完成后,我们可以使用以下命令来运行 nginx 容器:
$ docker run --name nginx-test -p 8080:80 -d nginx
参数说明:
- --name nginx-test:容器名称。
- -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
- -d nginx: 设置容器在在后台一直运行。
4、安装成功
最后我们可以通过浏览器可以直接访问 8080 端口的 nginx 服务:

进入容器
- alpine编译的进入要使用 docker exec -it 容器名 sh
- 其他使用bash
Docker部署nginx、配置域名
1) 挂载配置文件
在这里我使用了默认的nginx配置来启动容器, 接下来修改nginx.conf文件,这里需要我们在外部挂载一个配置文件nginx.conf来挂载容器里的nginx的配置文件,因为我们知道在docker里进入到nginx容器时,再去修改 /etc/nginx/nginx.conf文件是极其不方便的,想要在nginx容器外面去操作配置是极其不方便的,因此就有了挂载配置文件的方案。
首先在docker容器的外部新建一个/data/nginx/{conf,log,conf.d}, 其中conf目录下面为nginx的配置文件,default.conf为nginx的默认配置文件,这两个文件的内容可以先从docker容器里的nginx里拿出来,此路径需要通过指令进入到nginx容器的终端才能查看到, 另外不挂载的时候才能够进入到nginx容器的终端去查看路径。
注: 外挂时一定需要 nginx.conf和default.conf两个文件才行,并且要保证配置内容没有出错。

nginx.conf:

default.conf:

以下这两个配置文件的路径是用docker run起来以后,我们可以在没有指定挂载的时候,进入到nginx容器终端里显示出来的路径。
| 文件名 | 在nginx容器里的路径 |
|---|---|
| nginx.conf | /etc/nginx/conf |
| default.conf | /etc/nginx/conf.d/default.conf |
准备好如上所需要的配置文件后,我们就可以通过如下命令启动nginx容器:
docker run --name my-nginx -p 80:80 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/log:/var/log/nginx \
-v /data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-d nginx
参数解析:
-v: 表示的是将容器所需要的文件进行挂载, 本例中是将nginx镜像所在容器里的/etc/nginx/nginx.conf 文件挂载到 我们自定义的 /data/nginx/conf/nginx.conf 文件。
-d: 容器以后台的方式进行运行,关闭终端后也不停止。
-p: 80:80 , 将nginx容器的80端口映射到Docker的80端口。
启动成功后,通过docker ps命令查看容器是否在运行:

如果失败了,那么用docker logs 加上返回的一串字母串查看失败的日志。
2) 重新加载配置文件
通过上述步骤,我可以将nginx的配置文件挂载到了docker容器外,然后我们只需要在外部修改 /data/nginx/conf/nginx.conf 文件即可, 修改好后需要重新启动一下容器。
docker restart my-nginx
如果在run容器出现容器已经存在,那么可以通过以下指令删除指定的容器, 后面接容器的id或者Name, 前提是要将运行中的容器先暂停:
docker stop my-nginx
docker rm my-nginx
解决 nginx部署vue刷新、访问路由页面404
Bug
当使用nginx 部署vue项目的时候 当我们刷新页面的时候,或者访问路由配置页面的时候会直接404,这是因为通常我们做的vue项目属于单页面开发。所以只有index.html。解决这个bug也很简单。只需要将访问重定向到index.html这个页面。交由 index.html 去处理对应的路由跳转就好.
修改nginx配置
配置代码:
# 如果要配置多个IP 域名,将下面的server复制一份修改 server_name
server {
listen 80; # 监听的端口
server_name xx.xx.xxx.xx; # 处理的host地址 (请替换成你对应的项目访问 ip 或 域名)!!!
root /usr/share/nginx/html; # vue项目存在的目录(替换成你对应的地址,如果你这是用docker部署的请改成你容器内的地址(进入docker镜像中找到地址))
location / {
try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404
index index.html index.htm;
}
#对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件
#因此需要rewrite到index.html中,然后交给路由在处理请求资源
location @router {
rewrite ^.*$ /index.html last;
}
}
server_name请请替换成你对应的项目访问 ip 或 域名server下的root 替换成你vue项目代码存放的目录,如果使用的是docker跑的nginx请一定写成容器内的地址

解决 nginx部署vue刷新、访问路由页面404_cpc q:2531249502的博客-CSDN博客_nginx部署vue项目路由跳转刷新
一些命令
- systemctl start docker
- docker start [容器ID]
直接部署Vue到docker
-
将dist目录通过xftp拷贝到linux服务器上,同目录下新建Dockerfile
FROM nginx COPY ./dist/ /usr/share/nginx/html/ COPY nginx.conf /etc/nginx/nginx.conf -
拷贝nginx配置文件到物理机(一会儿做映射
-
打包镜像 当前目录下运行:docker build -t nginx-test .
-
运行容器
#现在物理机建好对应文件,文件内容要一起拷贝过去 docker run --name blog -p 80:80 \ -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /data/nginx/log:/var/log/nginx \ -v /data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \ -d blog

