记录一次nginx反向代理前端docker服务

最近很抑郁。

这是句无关紧要的话

事情是这样的,我们有一台服务器。
1.没联网2.只对外开放8080端口

后端喊我把我的服务反向代理。我没做过这玩意,我就只知道接口的反向代理。

后面通过求助大佬,解决了这一个问题

服务

先来看一下我的服务

image.png

有三个服务、客户端、服务端和数据库。

nginx配置

服务器中nginx的配置

image.png
就是当我访问服务器ip+端口+zk-service时,帮我代理到前端的服务上。

我的前端容器里面也有个内置的nginx。

前端的页面和访问后端的反向代理就是在这里执行的

前端容器中的nginx配置

先进入前端容器

docker exec -it ad4 sh

然后进入到 /etc/nginx/conf.d

cat 一下 default.conf 看一下配置

image.png

我们的打包后的静态文件是放在nginx的/usr/share/nginx/html里面的

因为我当时为了 做 前端的反向代理,就给前端的项目加了个根路径。然后就location 根路径,加个alias,因为当时我没在最上面写root 文件的根路径,一刷新就404,后面大哥给我加上了。就好了

后端的话是获取到请求接口是zk-api,然后反向代理到 http://server:3000/zk-manager。因为我是容器之间的通信,所以直接用容器的名字就可以访问。

整个容器编排的docker-compose

再来看下我的docker-compose

[root@iZay6018wp6ydt57r8rresZ home]# cat docker-compose.yml 
version: '3'
// 服务
services:
  // 前端服务名
  frontend:
    // 前端镜像,这镜像是我从另一台服务器导入进来的
    image: frontend-image
    // 容器名称
    container_name: frontend-container
    #entrypoint:
    #   - sleep
    #   - '3600'
    // 端口
    ports:
      - 4000:80
    // 内部网络,有了它,容器之间才能通信
    networks:
      - mysql_bridge
    // 依赖关系 不写的话 因为这个镜像构建容器比后台服务快,构建的时候没找到后台就容易起不来
    depends_on:
      - server
    // 挂载卷,单纯的代码更新,可以直接挂载进去容器
    volumes:
      // nginx的更新
      - ./default.conf:/etc/nginx/conf.d/default.conf
      如果不涉及到新的 npm package 直接挂载代码进去,相对方便
      - ./dist:/usr/share/nginx/html
  // 后端服务名 也就是我们后端请求接口时用到的
  server:
    // 同样是我导入进来的
    image: server-image:dianxinyun
    container_name: server-container
    ports:
      - 8081:3000
    networks:
      - mysql_bridge
    depends_on:
      - db

  db:
    restart: always
    image: db-image:dianxinyun
    container_name: mysql-db 
    ports:
      - 3307:3306
    networks:    
      - mysql_bridge
    environment:
      - MYSQL_ROOT_PASSWORD=syq123456
    volumes:
      #- /home/mysql/conf/my.cnf:/etc/mysql/my.cnf
      #- /home/mysql/initdb/:/docker-entrypoint-initdb.d/
    // 将本地数据挂载过去? 这一步我没咋注意,后面再说吧
      - /home/mysql/data/:/var/lib/mysql/ 
// 容器之间通信的网络
networks:
    mysql_bridge:

docker-compose up -d 就启动了

至于我导入的镜像,命令是这个
docker image load -i XXX.tar

从另一台机器导出的镜像,命令是
docker image save 镜像id 新的镜像名.tar

我以前还写了 docker常用命令,现在看看,没有实践,当时的记录卵用没有

回顾上一次

再去看看我的几个镜像的Dockerfile吧

其实应该先看 联网状态下的 docker-compose ,跟无网络的是不一样的,因为比如mysql的镜像就可以直接从网上拉取

算了,没在公司,连不上,看不了。就这吧

看一个月之前的文章都可以
记录一次部署流程docker-compose+nestjs+vue+prisma+mysql – 掘金 (juejin.cn)

记录一下吧,真的很烦,虽然没卵用。

像这天气,一会晴天、一会阴沉、一会打雷、一会闷热、一会下雨,一会又开始暴晒。

记录一个bug

对了我当时还遇到一个bug

是这样的

image.png

cannot mount volume over existing file

因为我这个前端镜像,第一次构建的时候,是跟随网上的教程,用docker commit 提交了一下,然后save导出来,再重新 docker run 的时候,又创建了一个内部的nginx想要挂载进去。就不行了。具体的也不太懂,以后再研究吧

解决办法就是在 docker-compose 里面 ,让一个外部的配置文件直接覆盖掉里面的已经存在的配置。上面有写

记录清除docker-iamge

上面那个bug 有人给我出了个主意,删掉 那一长串存在冲突的文件,这样就导致了别的容器也有问题,不要这样做。

只能把全部的镜像清除掉,重新导入,幸好当时只有我自己在用dokcer,不然就栓q了

 sudo systemctl stop docker

 sudo rm -rf /var/lib/docker/\*
 
 sudo systemctl start docker
 

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYfKfYDo' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片