[Docker实战] 旭日X3派上Docker Openwrt +Samba 实现局域网NAS 开启AP模式

Why Do I Need Docker, and How Do I Use It? | Hexlet Guides

🌈 博客个人主页Chris在Coding

🎥 本文所属专栏:[旭日X3派]    [Docker实战]

❤️ 前置学习专栏:[Linux学习]

⏰ 我们仍在旅途                                                                                   

目录

        1. 安装系统

        1.1 烧录准备

        1.2 烧录系统

        1.3 启动系统

        2. 远程登录

        2.1 网络连接

        2.2 开启vino服务

        2.3 VNC登录

        2.4 SSH连接--VsCode

                2.4.1.安装VsCode及插件

                2.4.2.添加服务器连接配置 

        3. 安装Docker OpenWrt

        3.1 安装Docker

                3.1.1 官方脚本一键安装

                3.1.2 ARM架构静态安装包部署Docker

                3.1.3 创建并加入docker组 

        3.2 安装Docker Portainer

        3.3 安装Docker Openwrt

        4. Samba局域网NAS

        4.1 创建共享目录

        4.2 Samba参数设置

        4.3 挂载点设置

        4.4 设置samba密码

        4.5 远程访问

        5. Soft AP模式


        1. 安装系统

旭日X3派开发板支持两个系统版本:Ubuntu 20.04 Desktop 和 Ubuntu 20.04 Server

  • Ubuntu Desktop:版本支持图形化桌面
  • Ubuntu Server:版本使用不带图形化桌面的命令行交互操作方式

这里我们安装Ubuntu Desktop版本

开发板Ubuntu镜像文件可从资源中心栏目中获取,如下图:

1.1 烧录准备

在烧录Ubuntu系统镜像前,用户需要做如下准备:

  • 准备至少8GB容量的Micro SD卡

  • SD 读卡器

  • 下载Ubuntu镜像压缩包,并解压出Ubuntu系统镜像文件:system_sdcard.img​

  • 下载镜像烧录工具balenaEtcher,下载链接:https://www.balena.io/etcher/

1.2 烧录系统

balenaEtcher是一款支持Windows/Mac/Linux等多平台的PC端启动盘制作工具,制作SD启动卡流程如下:

打开balenaEtcher工具,点击Flash frome file按钮,选择解压出来的system_sdcard.img文件作为烧录镜像

点击Select target按钮,选择对应的Micro SD存储卡作为目标存储设备

点击Flash按钮开始烧录,待工具提示Flash Complete时,表示镜像烧录完成,您可以关闭balenaEtcher工具并取出存储卡 

1.3 启动系统

首先保持旭日X3派开发板断电,然后将制作好的存储卡插入开发板的Micro SD卡槽,并通过HDMI线缆连接开发板与显示器,最后给开发板上电。用户可通过指示灯判断开发板状态,指示灯说明如下:

  • 红色指示灯:点亮代表硬件上电正常

  • 绿色指示灯:点亮代表系统启动中,熄灭代表系统启动完成

系统首次启动时会进行默认环境配置,整个过程持续45秒左右,配置结束后会在显示器输出Ubuntu系统桌面(Ubuntu Server显示logo图标)。

如果开发板上电后长时间没有显示输出(2分钟以上),说明开发板启动异常。此时用户可通过指示灯确认系统状态,方法如下:

  • 绿灯常亮:说明系统启动失败,可检查使用的电源适配器是否满足5V3A的要求,可尝试重新制作Micro SD卡系统镜像

  • 绿灯熄灭:说明系统启动成功,但显示服务启动失败,请确认连接的显示器符合支持列表规格

        2. 远程登录

注意:

本章节的操作,我是先将开发板接到独立的显示器并连接键鼠进行的,完成远程登陆的任务后,才能实现跨设备开发

远程连接需要保证设备与开发板处于同一个局域网内 ,这里我事先准备好了一个笔记本,准备与开发板连接到同一个WiFi下进行远程连接

2.1 网络连接

安装了Ubuntu 20.04 Desktop版本的开发板开机后会进入图形化桌面,直接点击右上角

(安装Ubuntu Server版本系统的用户,可通过命令行完成无线网络配置,这里就不再赘述)

查看开发板当前IP地址

使用下面这个命令可以查看当前设备的ip地址

ifconfig

我们主要看wlan0口的inet下的ip地址,这里我的地址是192.168.31.77

开发板有线网络默认采用静态IP配置,连接后同一路由器下的IP地址不会改变

2.2 开启vino服务

vino 是linux上一个用于远程桌面连接的VNC 服务端。这时如果我们直接打开VNC连接,是连不上的,主要原因是开发板是没有安装Vino服务的

我们需要自己去安装Vino服务

我们使用的地平线镜像中软件包是旧的,我们首先先更新软件包以及对应的软件:

1.按顺序执行下面两条命令

 更新软件源列表,以获取最新的软件包信息

sudo apt update

 用于安装已经在软件源中更新的软件包,使系统中的软件保持最新状态。 

sudo apt upgrade

(该过程需要保证网络的通畅,建议连接稳定的网络,整个过程可能花费10分钟左右,请耐心等待)

2.更新完后我们执行下面这条命令来安装vino

sudo apt install -y vino

3.再通过systemctl 命令启动: 

systemctl --user restart vino-server.service  # 启动 vino 服务

 4.查看vino状态:

systemctl --user status

 此时则代表vino服务运行

2.3 VNC登录

VNC Viewer是一个图形桌面共享软件,可在电脑上实现设备远程登录和控制桌面。该软件可以通过电脑显示器预览开发板系统桌面,并使用电脑的鼠标、键盘进行远程操作。用户通过VNC Viewer操作,可以获得跟开发板本地操作相同的效果,下载链接VNC Viewer。

目前VNC支持直接、云端两种连接方式,我们使用直接连接方式,连接步骤如下:

1.上方输入设备ip地址,这里我自己是:192.168.31.77

2.输入完后回车连接时可能会弹出如下面的窗口 

之所以出现这种问题是因为,远程连接Ubuntu桌面,Vino需将安全认证关闭才能通过VNC Viewer连接。

3.这时我们可以通过以下命令可以关闭安全认证方式:

sudo gsettings set org.gnome.Vino prompt-enabled false

4.输入该命令后,系统可能会继续报错

failed to commit changes to dconf: Failed to execute child process “dbus-launch” (No such file or directory)

不要急,这说明我们的系统中缺少需要的包

sudo apt-get install dbus-x11 -y

5.安装好后再次执行关闭安全认证命令,没有再报错后,我们重启vino服务

systemctl --user restart vino-server.service  # 启动 vino 服务

6.这个时候我们再去使用VNC Viewer连接,如果再弹出相同错误的弹窗,可能是重启Vino出了问题(我在实际操作中用地平线官方镜像时遇到了!)

这个时候我们只需要用万能的关机重启大法就好了

2.4 SSH连接--VsCode

通过VNC我们确实可以做到远程连接开发板桌面了,但是实际上开发依然十分低效,我这里十分推荐在VNC的基础上再用VsCode进行SSH连接

2.4.1.安装VsCode及插件

Visual Stdio Code简称VS Code,是一款跨平台的、免费且开源的现代轻量级代码编辑器,支持几乎 主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性,也拥有对git的开箱即用的支持。同时,它还支持插件扩展,通过丰富的插件,用户能获得更多高效的功能.

vsCode官网下载

下载安装后我们还需要安装远程连接的插件Remote - SSH

除此之外我还推荐安装以下的插件

  • Chinese (Simplified) 
  • vscode-icons 
  • C/C++ Extension Pack
  • GBKtoUTF8 

2.4.2.添加服务器连接配置 

  • 我们先点击左边多出来的远程资源管理器
  • 再点击左上角的+号新建远程
  • 然后在弹出来的方框中输入命令,这里我输入的是ssh sunrise@192.168.31.77,其中ssh和@是固定语法不能更改,sunrise是对应的用户名字(地平线官方镜像默认sunrise),192.168.31.77是自己开发板的IP地址

这是将连接的信息文件保存

我们在SSH栏中找到我们需要连接的对应服务器,点击旁边的两个图标任一都可以

之后输入对应用户的密码即可,我用的地平线官方镜像用户名与密码都默认是sunrise

成功进入后,我们后面就可以通过VsCode来实现编程开发

我们再按下CTRL+`就可以进入命令行终端,这样开发就更方便了

        3. 安装Docker OpenWrt

3.1 安装Docker

安装docker这里有两种方案,分别是手动静态软件包安装还有官方脚本部署

这里更推荐后者:官方脚本部署,特点:简单,快捷

当然我也会详细写出怎么手动安装的方案,喜欢折腾的朋友也可以参考学习一下

3.1.1 官方脚本一键安装

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

3.1.2 ARM架构静态安装包部署Docker

由于我使用的旭日X3派是ARM架构,这使得我们跟着官方的步骤走,也会报出很多莫名奇妙的错误,

所以这里我们采用了静态安装包部署Docker的办法(不是ARM架构的朋友跟着官方或者别人的博客走都问题不大,这里我就不再赘述)

1.下载Docker静态包

Docker静态安装包的下载地址为:Index of linux/static/stable/aarch64/

这里我直接在我板子上的FireFox浏览器上打开下载

这里我直接选择下载我当前的最新版本docker-25.0.3

2.解压Docker静态包

文件是默认下载到路径 /home/用户名/Downloads/

我们先进入下载目录

cd /home/sunrise/Downloads/

解压并移动到/usr/bin/目录 

tar xvf docker-20.10.24.tgz
cp docker/* /usr/bin/

3 将docker注册为service

用vim创建并编辑docker.service

sudo vim /etc/systemd/system/docker.service

进入后我们单击 i ,进入插入模式

再复制粘贴下面内容到文件

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --selinux-enabled=false -H unix://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

复制粘贴完后我们先按ESC进入普通模式

再单击进入命令模式,输入wq后再回车,就写入并保存

 4 启动docker

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

3.1.3 创建并加入docker组 

在安装成功并运行好后,我们在使用docker命令时,会遇到如下报错

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get

报错称是权限问题,这时候得加上sudo才行.我们可以通过加入docker组的方法解决权限问题

静态安装包安装是不会给你创建docker的group的,所以我们需要自己创建一个

sudo groupadd docker

然后再执行添加用户操作就可以成功了,最后重启docker 

sudo usermod -aG docker ${USER}
sudo systemctl restart docker

restart后仍出现相同问题的,可能是重启容器环节有纰漏,推荐关机重启大法

3.2 安装Docker Portainer

portainer是一款容器管理可视化界面,不想在虚拟中使用命令管理容器的小伙伴,可以选择安装portainer对容器进行管理,查看日志、启动、停止容器等非常方便。

1.拉取并启动镜像

docker run -d --network host -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

2.使用Docker Portainer


这时候我们只需要输入在浏览器中输入 开发板IP:9000 就可以访问

3.3 安装Docker Openwrt

OpenWrt是一款开源的嵌入式操作系统,专门设计用于智能路由器和网络设备。它基于Linux内核,提供了丰富的功能和灵活的定制化选项,成为开发智能路由器的强大工具。

Github地址 这里包含了很全的镜像文件包含了 arm  x86  x64 的 docker 镜像文件,我的机器是旭日X3派 所以只能安装这个镜像 sulinggg/openwrt:latest 。其他机器请去链接自行下载

1.拉取并启动镜像

docker run -d --restart always --name openwrt --privileged --network host  sulinggg/openwrt:armv8 /sbin/init

2.使用Docker Openwrt

这时候我们只需要输入在浏览器中输入 开发板IP 就可以了

默认密码是 password

        4. Samba局域网NAS

如果是安装的我前面提到的Docker Openwrt,里面是已经集成了Samba,我们不需要格外安装

4.1 创建共享目录

我们可以使用Portainer连接openwrt容器的界面,进入界面后我们先创建好共享目录

mkdir -p /home/share

设置权限 

chmod 777 /home/share

4.2 Samba参数设置

我们先来到可视化界面中的NAS栏中的网络共享,目录就写前面创建的共享目录,用户我们这里就写root

来到编辑模板一栏,把bind interfaces only = yesinvalid users = root两栏注释掉(在行前面加#)

修改完后保存

4.3 挂载点设置

勾选启用挂载点,再把挂载点设置成共享目录

4.4 设置samba密码

我们在回到Portainer连接openwrt容器的界面

smbpasswd -a root

我们为root用户设置专门的samba服务密码,设置完后我们重启samba服务

 service samba restart

4.5 远程访问

我们按下Win+R组合键打开运行,输入\\:开发板IP地址后回车

用户输入我们的root用户,再输入好我们前面设置的samba密码

这时后,成功访问共享文件,并创建新的文件夹

        5. Soft AP模式

这章的代码内容都是直接用的官方文档,我这里主要说一下思路

  • 由于我们使用的docker openwrt里面是没有集成热点模块的,想要在docker openwrt上开启AP模式就无从谈起了.我也试了几个不同的docker镜像,里面只有一个x86架构的支持,但旭日X3派是arm架构.
  • 想要加入热点模块,我们就只能在宿主机上的Ubuntu系统动刀,后面也是在下面几个大神的博客中才得到启发:

斐讯 N1 部署 Docker 和 OpenWRT,并利用 Hostapd 开启 Wi-Fi 热点 · Oaker's Blog

利用hostapd启动ac 5G无线AP

[N1盒子] 【原创】Docker内OpenWRT设置成主路由,为WiFi接入的客户提供源自有线网口的网络服务

  • 说来也是好笑,在实操的过程中报错频出不断,差点要放弃时,最后才发现地平线官方已经给出了开启AP模式的办法,也是希望各位朋友不要像我这样踩坑.

开发板无线网络默认运行在Station模式下,如需使用Soft AP模式,请按照以下步骤进行配置。

1.安装hostapd 和 isc-dhcp-server

sudo apt update
sudo apt install hostapd
sudo apt install isc-dhcp-server

2.运行 sudo vim /etc/hostapd.conf命令来配置hostapd.conf,主要关注下面几个字段:

interface=wlan0 #作为AP热点的网卡
ssid=Sunrise #WiFi名字
wpa=2 #0为WPA 2为WPA2 一般为2
wpa_key_mgmt=WPA-PSK #加密算法 一般为WPA-PSK
wpa_passphrase=12345678 #密码
wpa_pairwise=CCMP #加密协议,一般为CCMP
  • 无密码的热点配置,请在hostapd.conf文件添加以下内容:

interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ssid=Sunrise
channel=6
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0
  • 有密码的热点配置,请在hostapd.conf文件添加以下内容:

interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ssid=Sunrise
channel=6
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=12345678

3.配置isc-dhcp-server文件,步骤如下:

  • 执行 sudo vim /etc/default/isc-dhcp-server修改isc-dhcp-server文件,添加如下定义的网络接口:
INTERFACESv4="wlan0"
  • 执行 sudo vim /etc/dhcp/dhcpd.conf修改dhcpd.conf文件, 取消以下字段的注释
  authoritative;
  • 然后在 /etc/dhcp/dhcpd.conf文件末尾增加以下配置:
 subnet 10.5.5.0 netmask 255.255.255.0 { #网段和子网掩码range 10.5.5.100 10.5.5.254;#可获取的IP范围option subnet-mask 255.255.255.0; #子网掩码option routers 10.5.5.1;#默认网关option broadcast-address 10.5.5.31;#广播地址default-lease-time 600;#默认租约期限,单位秒max-lease-time 7200;#最长租约期限,单位秒
}

4.停止 wpa_supplicant 服务,并重启 wlan0

systemctl stop wpa_supplicantip addr flush dev wlan0
sleep 0.5
ifconfig wlan0 down
sleep 1
ifconfig wlan0 up

5.按如下步骤启动 hostapd服务

  • 执行sudo hostapd -B /etc/hostapd.conf命令
 root@ubuntu:~# sudo hostapd -B /etc/hostapd.confConfiguration file: /etc/hostapd.confUsing interface wlan0 with hwaddr 08:e9:f6:af:18:26 and ssid "sunrise"wlan0: interface state UNINITIALIZED->ENABLEDwlan0: AP-ENABLED
  • 通过ifconfig命令,配置无线接口wlan0的IP和网段,注意要跟第三步的配置保持一致
sudo ifconfig wlan0 10.5.5.1 netmask 255.255.255.0
  • 最后开启dhcp服务器,连上热点会从10.5.5.100到10.5.5.255之间分配一个ip地址给客户端
sudo ifconfig wlan0 10.5.5.1 netmask 255.255.255.0
sudo systemctl start isc-dhcp-server
sudo systemctl enable isc-dhcp-server

6.连接开发板热点,例如 sunrise

7.如需切换回Station模式,可按如下方式进行:

# 停止 hostapd
killall5 -9 hostapd# 清除 wlan0 的地址
ip addr flush dev wlan0
sleep 0.5
ifconfig wlan0 down
sleep 1
ifconfig wlan0 up# 重启 wpa_supplicant
systemctl restart wpa_supplicant# 连接热点,,具体操作可以查看上一章节 “无线网络”
wifi_connect "WiFi-Test" "12345678"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建补丁文件.patch

前言 在linux中,在工程实践中。 自己基于文件1进行了修改,得到文件2,文件1有线上仓库。时常会遇到以下两种情景: 由于文件过大,直接向组员分享文件2很麻烦。由于修改地方过多,每次更换环境都需要重新修改文…

【JAVA语言-第18话】集合框架(五)——Map、HashMap、LinkedHashMap、TreeMap集合

目录 双列集合Map 1.1 概述 1.2 特点 1.3 Map接口中的常用方法 1.3.1 练习 1.4 HashMap集合 1.4.1 概述 1.4.2 特点 1.5 LinkedHashMap集合 1.5.1 概述 1.5.2 特点 1.6 TreeMap集合 1.6.1 概述 1.6.2 特点 1.7 Map集合练习 1.8 HashMap、LinkedHashMap、Tre…

【EI会议征稿通知】第五届城市工程与管理科学国际会议(ICUEMS 2024)

【Scopus稳定检索】第五届城市工程与管理科学国际会议(ICUEMS 2024) 2024 5th International Conference on Urban Engineering and Management Science 第五届城市工程与管理科学国际会议(ICUEMS 2024)将于2024年5月31日-6月2日…

GitKraken Create Repository and Clone不可点击

问题 GitKraken Create Repository and Clone不可点击 详细问题 笔者第一次使用GitKraken,在创建仓库时,填写完成仓库初始化后。发现Create Repository and Clone不可点击。 解决方案 选择Where to clone to位置 产生原因 在创建仓库时&#xff0…

洛谷: P1479 宿舍里的故事之五子棋

题目链接: https://www.luogu.com.cn/problem/P1479 思路: 这道题目可以打表或者搜索。每个位置有选择/不选择两种情况。搜索的时候我们一行一行的搜索,直到使用的棋子达到n为止。b[i]为五子连线的数量,b[i] 1表示五子连线的数量可以取i,在…

day6:继承与多态

思维导图 2.编程题: 以下是一个简单的比喻,将多态概念与生活中的实际情况相联系:比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在&#xff…

如何引导llm为自己写prompt生成剧本

如何使用写prompt让你自己生一个狗血修仙穿越短剧,且短剧有趣生动让人流连忘返 好的,我会尝试编写一个狗血修仙穿越短剧的prompt,以激发你的想象力,让你创作出一个既有趣又生动的短剧。以下是我的prompt: 标题&#x…

简洁高效的短链接:优化互联网体验

title: 简洁高效的短链接:优化互联网体验 date: 2024/2/18 13:24:24 updated: 2024/2/18 13:24:24 tags: 短链接长网址缩短美观简洁分享优化点击率提升数据统计用户体验 在互联网时代,我们经常遇到需要分享长网址的情况。长网址不仅不美观,而…

Mysql开启bin-log日志

目录 一、安装配置 二、mysqlbinlog命令 一、安装配置 yum -y install mariadb mariadb-server#安装mysql数据库#默认配置文件/etc/my.cnfvim /etc/my.cnflog-binmariadb-bin #开启二进制日志 systemctl restart mariadb#会在/car/lib/mysql/产生二进制日志文件&#xff0…

防火墙(三) -----------------关于iptables规则的保存

一、关于iptables规则的保存 之前写的iptables的设置,但是都是临时生效的,一旦电脑重启,那么就会失效,如何永久保存,需要借助iptables-save命令,开机生效需要借助iptables-restore命令,并写入规…

AB测试最小样本量

1.AB实验过程 常见的AB实验过程,分流-->实验-->数据分析-->决策:分流:用户被随机均匀的分为不同的组实验:同一组内的用户在实验期间使用相同的策略,不同组的用户使用相同或不同的策略。数据收集:…

HOOPS发布全新CAD文件支持以及改进的API性能版本!增加了对Navisworks和C#支持!

全球工程软件开发工具包的领先提供商Tech Soft 3D今天宣布推出HOOPS Exchange 2024(支持30多种文件格式的领先CAD数据转换SDK)和HOOPS Publish 2024,用于发布交互式3D PDF、3D HTML和3D CAD数据的领先工具包。 HOOPS Exchange现在支持Navisw…

C++day6

模拟跟随导演去动物园&#xff1a; #include <iostream>using namespace std; class Animal { private:string name; public:Animal(){}Animal(string name):name(name){}virtual void perform(){cout << name << "为我们讲解,说&#xff1a;" &…

php 数组函数

php 数组函数 1. 常用的php数组函数 1. 常用的php数组函数 array_pop() 删除数组中最后一个元素 array_push() 将一个或多个元素插入到数组的末尾 array_keys <?php $arr array("刘岩" > 30, "范冰冰" > 31, "娜扎" > 31);$…

~汉诺塔~(C语言)~

引言 汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从上面开始按大小顺序重新摆放在…

npm run serve启动报错npm ERR! Missing script: “serve“

启动项目的时候用npm run serve发现报了以下的错误 解决方法&#xff1a; 1.一般情况下&#xff0c;这个问题是因为package.json文件里面确实没有 这里没有可能因为你的脚手架版本比较低&#xff0c;如果不想换&#xff0c;可以用 这里面有的 npm run dev去启动也是可以的 n…

精工电联:定制精工线缆,赋能科技互联---致力于为客户提供卓越的连接线缆和连接器产品

精工电联 “定制精工线缆 &#xff0c;赋能科技互联”&#xff0c;精工电联致力于为高科技产业提供全方位、多维度的集成线缆解决方案。凭借深厚的研发实力和丰富的行业经验&#xff0c;精工电联已经成功地在工控设备、医疗设备、人工智能、新能源领域、轨道交通和超声波设备等…

分享一个学英语的网站

名字叫&#xff1a;公益大米网​​​​​​​ Freerice 这个网站是以做题的形式来记忆单词&#xff0c;题干是一个单词&#xff0c;给出4个选项&#xff0c;需要选出其中最接近题干单词的选项。 答对可以获得10粒大米&#xff0c;网站的创办者负责捐赠。如图 触发某些条件&a…

el-form validator的校验提示遮盖下边的内容

问题&#xff1a;表单的validator校验&#xff0c;无法自动撑起tip提示的高度&#xff0c;导致遮盖了下边内容 解决方式&#xff1a;将tip提示的样式的定位设置为遵循正常的文档流对象&#xff0c;实现自适应高度。 .el-form-item .el-form-item__content .el-form-item__err…

数据库MySQL中出现乱码和表格不对齐怎么解决

MySQL中出现乱码问题及解决办法&#xff1a; 情况类似&#xff1a; 首先进入到数据库中&#xff0c;命令&#xff1a;mysql -h localhost -uroot -p或者mysql -uroot -p;进入数据库后选择一个你的数据库查看表中的中文是否乱码 以上是数据库中表格出现乱码情况&#xff0c;原…