9月22
创建watermark.js文件

let watermark = {}

let setWatermark = (str) => {
let id = '1.23452384164.123412416';

if (document.getElementById(id) !== null) {
document.body.removeChild(document.getElementById(id));
}

//创建一个画布
let can = document.createElement('canvas');
//设置画布的长宽
can.width = 120;
can.height = 120;

let cans = can.getContext('2d');
//旋转角度
cans.rotate(-15 * Math.PI / 180);
cans.font = '18px Vedana';
//设置填充绘画的颜色、渐变或者模式
cans.fillStyle = 'rgba(200, 200, 200, 0.40)';
//设置文本内容的当前对齐方式
cans.textAlign = 'left';
//设置在绘制文本时使用的当前文本基线
cans.textBaseline = 'Middle';
//在画布上绘制填色的文本(输出的文本,开始绘制文本的X坐标位置,开始绘制文本的Y坐标位置)
cans.fillText(str, can.width / 8, can.height / 2);

let div = document.createElement('div');
div.id = id;
div.style.pointerEvents = 'none';
div.style.top = '30px';
div.style.left = '0px';
div.style.position = 'fixed';
div.style.zIndex = '100000';
div.style.width = document.documentElement.clientWidth + 'px';
div.style.height = document.documentElement.clientHeight + 'px';
div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
document.body.appendChild(div);
return id;
}

// 该方法只允许调用一次
watermark.set = (str) => {
let id = setWatermark(str);
setInterval(() => {
if (document.getElementById(id) === null) {
  id = setWatermark(str);
}
}, 500);
window.onresize = () => {
setWatermark(str);
};
}

export default watermark;

9月8
Chrome无痕模式不存储任何信息,除了下载的东西除外,稍微能提升点速度,而且能很好的保护隐私,进入无痕模式有两种

第一种

点击浏览器右上角打开新的无痕窗口

第二种

右键点击Chrome图标属性  

点击在新窗口中浏览此图片

加上这个参数  --incognito

然后关闭浏览器重新再打开,直接就是无痕模式。
9月6
在nfs和nfs的守护进程rpcbind起来后,会由几个端口,防火墙需要打通,才能使客户端访问,否客户端列文件目录一直卡住,进不去挂载的目录。

nfs启动时会随机启动多个端口并向RPC注册,这样如果开启防火墙对NFS端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口。这样设置固定端口以后即便重启机器也很方便挂载,如果不设置固定端口,机器或服务重启后之前防火墙添加的规则就失效了,

下面的是没有设置固定端口时的情况
点击在新窗口中浏览此图片


设置固定端口:

编辑 /etc/sysconfig/nfs 文件:

vim /etc/sysconfig/nfs
在文件最后添加如下内容:
##########################分割线###############################
MOUNTD_PORT=4001
STATD_PORT=4002
LOCKD_TCPPORT=4003
LOCKD_UDPPORT=4004
RQUOTAD_PORT=4005

添加后保存退出并重启 rpcbind和nfs

systemctl restart rpcbind
systemctl restart nfs
重启服务后再查看端口:
点击在新窗口中浏览此图片


nfs端口是2049,rpcbind的端口是111固定的,防火墙中也需要开启。

firewall-cmd --zone=public --add-port=4001-4005/tcp --permanent
firewall-cmd --zone=public --add-port=4001-4005/udp --permanent
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent

firewall-cmd --reload
9月6
准备工作
1.下载nfs服务(服务端机和客户端机器都需要安装)
yum -y install rpcbind nfs-utils

2.关闭防火墙
systemctl stop firewalld

setenforce 0 ;

3. 编辑配置文件
vim /etc/exports

添加内容为:

/data/file 对应的主机或IP地址  例如:/data/file 192.168.11.66/24(rw,async)

4.启动nfs服务,启动rpc服务
systemctl  start rpcbind

systemctl start nfs

6、查看配置文件是否生效
showmount -e
输出如下:
Export list for mesapp1:
/data/file 192.168.11.66/24

7.客户端机先启动rpcbind服务再查看nfs服务可用目录

systemctl start rpcbind
systemctl enable rpcbind

showmount -e 192.168.1.66(服务器端IP地址)
输出如下:
Export list for 192.168.1.66:
/data/file 192.168.11.66/24

最后执行挂载命令

挂载:mount -t nfs 192.168.1.66:/data/file /data/file

异常如下:mount.nfs: No route to host

解决:
1、ping 服务器没有问题,网络是通的

2、服务端和客户端防火墙和 selinux 状态

firewall-cmd --state
显示是running
systemctl stop firewalld.service

注意:将服务器和客户端全部将防火墙关闭哦!

3.再次挂载,就OK

4.查看  showmount -e 192.168.1.66

会显示挂载的信息
9月5
假设我有一个包含一些静态数据的Docker容器。

通过docker-compose配置文件volumes参数

docker-compose.yml文件:

配置文件示例:

volumes:
  - /var/run/:/host/var/run/
  - /channel-artifacts:/var/hyperledger/configs
  - /data/logs:/tmp/logs/

把容器中/tmp/logs目录映射到宿主机根据目录下的/data/logs目录下。这两个目录会共享数据。

当使用命名卷并检查它时,它的工作方式与预期类似。
9月5
一. 问题描述
  在docker部署nacos的时候遇到了这个样子的问题No route to host 导致了nacos容器无法连接宿主机的docker数据库。
  然后我就进入到了nacos容器里面,ping了宿主机的地址,结果是通着的,然后使用telnet测试了3306端口,结果也会报出这个异常。
  原因是什么呢?明明数据库外部可以正常连接访问,但是宿主机内部容器确实无法访问?

二. 原因分析
  在进行docker部署的时候我们采用的是bridge网桥的模式。

  启动docker时,docker进程会创建一个名为docker0的虚拟网桥,用于宿主机与容器之间的通信。当启动一个docker容器时,docker容器将会附加到虚拟网桥上,容器内的报文通过docker0向外转发。

  如果docker容器访问宿主机,那么docker0网桥将报文直接转发到本机,报文的源地址是docker0网段的地址。而如果docker容器访问宿主机以外的机器,docker的SNAT网桥会将报文的源地址转换为宿主机的地址,通过宿主机的网卡向外发送。

  因此,当docker容器访问宿主机时,如果宿主机服务端口会被防火墙拦截,从而无法连通宿主机,出现No route to host的错误。

  而访问宿主机所在局域网内的其他机器,由于报文的源地址是宿主机ip,因此,不会被目的机器防火墙拦截,所以可以访问。

三. 解决方案
1> 关闭宿主机的防火墙
systemctl stop firewalld

2> 在防火墙上开发指定的端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --reload
注:在进行完防火墙的操作之后最好是要进行以下docker的重启,systemctl restart docker,否则容器到因为虚拟网桥失效而导致的iptables failed问题

四. 小结
  docker的容器网络连接一直是一个问题,容器与容器之间,容器与宿主机之间,容器跨主机访问,所以在涉及到容器的网络连接的时候要注意网络的问题。
9月5
Nacos微服务注册中心无法调用Docker容器中的服务
前言:
Nacos(注册中心)是通过 【 IP+PORT】 的形式调用其他服务。

问题:

Docker容器使用虚拟IP, 当Docker中的服务A,向Nacos注册的时候,Nacos获取到了Docker的内部IP, 导致另外一个服务B,想通过注册中心调用服务A, 但由于服务B从nacos注册中心获取到的是服务A的内部IP,这样导致了两个处于公网的微服务之间,无法互相访问!

解决办法:

将Docker中的服务网络配置与宿主机共用同一个IP, 此时服务向nacos注册的时候,nacos将会获取到宿主机的公网IP, 所以问题迎刃而解。

我的docker是使用docker-compose来启动的,具体配置如下:

version: '3'
services:
  iap-system:
    build:
      context: ./
      dockerfile: Dockerfile-system
    restart: always
    ports:
      - 19002:19002
    container_name: iap-system
    hostname: iap-system
    image: iap-system
    network_mode: "host"  # 与宿主机共有一个IP

当然,配置了上述网络类型后, nacos是可以拿到宿主机的IP, 但是此时拿到的是宿主机的内网IP, 解决办法如下:

spring:
  cloud:
    inetutils:
      ignored-interfaces: eth.*              # 忽略网卡,eth.*,正则表达式
      preferred-networks: ${discovery.server-ip}    # 选择符合前缀的IP作为服务注册IP, discovery.server-ip就是你的公网IP

解释:

启动 Docker的时候,用 --network 参数,可以指定网络类型

--network host

host: 主机网络使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。 例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。

结果:

Nacos注册中心获取到宿主机IP, 微服务之间调用成功!

如有帮助,请赞赏鼓励!
9月5
ocker 中的服务注册到nacos时默认是docker容器内网的IP地址,使用--network=host 是宿主机所在的局域网的ip 我想把公网ip注册到nacos上

可以使用以下两种方式:
1、如果docker网络采用的是主机模式即--network=host,那么这时候注册就是宿主机的ip。
2、nacos服务发现时添加ip即可。spring:
  cloud:
    nacos:
      discovery:
        ip: ${HOST:10.128.1.122}
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]