解决 VirtualBox Error creating machine: Error in driver during machine creation: Error setting up host only network on machine start 作者: Chuwen 时间: 2021-12-14 分类: VirtualBox 评论 执行命令 `docker-machine create --driver virtualbox master` 创建虚拟网卡报错: ```log Running pre-create checks... Creating machine... (master) Copying /Users/chuwen/.docker/machine/cache/boot2docker.iso to /Users/chuwen/.docker/machine/machines/master/boot2docker.iso... (master) Creating VirtualBox VM... (master) Creating SSH key... (master) Starting the VM... (master) Check network to re-create if needed... (master) Found a new host-only adapter: "vboxnet0" Error creating machine: Error in driver during machine creation: Error setting up host only network on machine start: /usr/local/bin/VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.99.1 --netmask 255.255.255.0 failed: VBoxManage: error: Code E_ACCESSDENIED (0x80070005) - Access denied (extended info not available) VBoxManage: error: Context: "EnableStaticIPConfig(Bstr(pszIp).raw(), Bstr(pszNetmask).raw())" at line 242 of file VBoxManageHostonly.cpp ``` 搜到的相关链接: - https://www.bookstack.cn/read/Minikube-1.24-en/ad8abb690946c9ec.md 原因:**在 Linux、Mac OS X 和带有 VirtualBox >= 6.1.28 的 Oracle Solaris 上,默认情况下,仅主机网络只允许 192.68.56.0/21 范围内的 IP 地址。** 然而 docker-machine 指定创建(VBoxManage hostonlyif ipconfig vboxnet0 --ip192.168.99.1 --netmask 255.255.255.0)`192.168.99.1/24` 的网段,这就导致创建失败 ## 解决办法 1.VirtualBox 降级到 `6.1.28` 之前的版本,可以从这里下载:https://www.virtualbox.org/wiki/Download_Old_Builds_6_1 我下载的是 `6.1.26` (注意我下载的是 macOS X 版本):https://download.virtualbox.org/virtualbox/6.1.26/VirtualBox-6.1.26-145957-OSX.dmg 成功运行了 2.执行以下命令: > **我自己测试是失败的** ```shell sudo mkdir -p /etc/vbox sudo vim /etc/vbox/networks.conf ``` 内容填写 `* 10.0.0.0/8` 然后保存即可 --- #### 你在 Big Sur 安装,可能会遇到的: ``` Kernel driver not installed (rc=-1908) Make sure the kernel module has been loaded successfully. where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT. ``` 解决办法:https://apple.stackexchange.com/questions/410529/virtualbox-does-not-work-after-upgrading-to-big-sur 简要概述: - 重启到恢复模式 -> 终端 -> 运行命令 `spctl kext-consent add VB5E2TV963` - 最后重启进系统即可
Docker for Windows (使用 WSL 2)更改最大使用内存、CPU 核心数量 作者: Chuwen 时间: 2021-10-30 分类: Windows,Docker 评论 ## 序言 在 macOS 下,是可以在 Docker Desktop 上直接修改使用的内存、CPU 的,但是在 Windows 上就没有,而是提示这个 ![](https://cdn.nowtime.cc/2021/10/30/2651558981.png) 所以,我们就访问 https://docs.microsoft.com/en-us/windows/wsl/wsl-config 看看怎么配置 ## 配置 1. 按下Windows + R 键,输入 `%UserProfile%` 并运行进入用户文件夹 2. 新建文件 `.wslconfig` ,然后记事本编辑 ```conf [wsl2] memory=2GB processors=2 swap=0 localhostForwarding=true ``` > `memory`: 表示最大使用 **2GB** 内存 > `swap`: 表示不设置 swap > `localhostForwarding`: `默认值为 true`。如果 WSL 2 VM 中绑定到通配符或 localhost 的端口应该可以通过 `localhost:port` 从主机连接。 > `processors`: 使用的核心数量,默认和你的 Windows 系统使用的核心数一样 所以以上我的配置时的是,最大使用内存 `2GB`、2 个核心、不设置 swap ## 后 设置完成后,运行 `wsl --shutdown` 即可 如我所愿: ![](https://cdn.nowtime.cc/2021/10/30/3785919230.png)
解决安装 Docker for Windows, Vmmem 内存占用过高问题 作者: Chuwen 时间: 2021-10-30 分类: Windows,Docker 评论 ![Vmmem 内存占用过高问题](https://cdn.nowtime.cc/2021/10/30/241227457.png) ## 步骤 1. 按下Windows + R 键,输入 `%UserProfile%` 并运行进入用户文件夹 2. 新建文件 `.wslconfig` ,然后记事本编辑 3. 填入以下内容并保存, `memory` 为系统内存上限,这里我限制最大 2GB,可根据自身电脑配置设置 ```conf [wsl2] memory=2GB swap=0 localhostForwarding=true ``` 4. 然后启动 cmd 命令提示符,输入 `wsl --shutdown` 来关闭当前的子系统 5. 然后不出意外 Docker 会发送一个停止的通知,你点击重启的按钮就会重启了 6. 现在内存占用正常多了,这个内存占用正是我们设置的最大占用内存 ![](https://cdn.nowtime.cc/2021/10/30/999574981.png) 看了下本地用 Docker 搭建的宝塔面板,内存也显示 2GB: ![](https://cdn.nowtime.cc/2021/10/30/616799405.png) Ubuntu for WSL(使用 `htop` 命令查看): ![](https://cdn.nowtime.cc/2021/10/30/3449071115.png) ## 相关引用参考 - https://www.cnblogs.com/coding8832/p/14445835.html - https://docs.microsoft.com/en-us/windows/wsl/wsl-config#configure-global-options-with-wslconfig > You are using the WSL 2 backend, so resource limits are managed by Windows. > > You can configure limits on the memory, CPU, and swap size allocated to WSL 2 in a [.wslconfig file.](https://docs.microsoft.com/en-us/windows/wsl/wsl-config#configure-global-options-with-wslconfig ".wslconfig file.") ![](https://cdn.nowtime.cc/2021/10/30/4024169058.png)
Docker 下搭建 Spug,容器里面的执行 docker 命令 作者: Chuwen 时间: 2021-10-28 分类: Docker 评论 ## 序言 由于前端打包?环境多变,可能有以下情况: - 有的项目需要 `node:12.0` 才能 `build` 成功 - 有的项目需要 `node:16.0` 才能 `build` 成功 - ... 这些环境多变,在使用 Docker 部署的 `Spug` 时,我们希望的是在容器里还想再使用 Docker,需要什么环境拉**对应的镜像**就可以 ## 过程 ### Docker 部署 Spug > Docker 的安装过程不再过多赘述,主要的 `Docker` 映射就是在第 5、6 行 > > 这样就实现了“套娃”:`Docker` 容器里,使用 `Docker`。 > > 需要⚠️:容器里使用的 `Docker` 是宿主机的 `Docker`,所以容器里使用 Docker 的路径映射映射的是宿主机里的,**这个下面会讲到** ```shell docker run -d \ --restart=always --name=spug \ -p 80:80 \ -v /data/spug/:/data \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ openspug/spug ``` ### Spug 部署前端(Node.js)项目(如 Vue.js、React) #### 2. 构建配置 | `Spug 环境变量` | 容器 | 宿主机 | | ---------------- | ----------------- | ------------ | | `SPUG_REPOS_DIR` | /data/spug/repos/ | /data/repos/ | **文件过滤规则(包含模式):** ```tex dist/* ``` **代码检出前执行:** ```shell echo "代码检出前执行" echo $SPUG_REPOS_DIR/$SPUG_DEPLOY_ID/node_modules mkdir -p $SPUG_REPOS_DIR/$SPUG_DEPLOY_ID/node_modules ``` **代码检出后执行:** > 注意 Docker 映射的路径,Docker 容器里调用 Docker(这个 Docker 是在宿主机里面的,所以路径映射一定要正确) ```shell # 软链接 node_modules,因为这个不会怎么改变的 ln -s $SPUG_REPOS_DIR/$SPUG_DEPLOY_ID/node_modules . WORK_DIR=$(pwd) # 宿主机里面的 repos 路径 HOST_REPOS_DIR=/data/spug/repos # 这个操作就是替换为在宿主机真实工作路径 TARGET_WORK_DIR=${WORK_DIR/${SPUG_REPOS_DIR}/${HOST_REPOS_DIR}} echo "当前工作目录:$WORK_DIR" echo "宿主机目录:$HOST_REPOS_DIR" echo "目标路径:$TARGET_WORK_DIR" # 安装依赖包 docker run --rm \ -v $HOST_REPOS_DIR/$SPUG_DEPLOY_ID:/usr/src/app \ -w /usr/src/app \ node:16.0.0 \ yarn # 执行 build # 注意下映射路径 docker run --rm \ -v $HOST_REPOS_DIR/$SPUG_DEPLOY_ID/node_modules:$SPUG_REPOS_DIR/$SPUG_DEPLOY_ID/node_modules \ -v $TARGET_WORK_DIR:/usr/src/app \ -w /usr/src/app \ node:16.0.0 \ yarn build ``` #### 3. 发布配置: **部署路径:** > 这个指的是部署到**目标服务器**的路径,而不是 `Spug` 的路径哦 > > 这个路径一定不能有文件夹,因为 Spug 会自动创建(软链接) **存储路径:** > 用以存储历史版本的数量的路径 **应用发布前执行:** ```shell mv dist/* . rm -rf dist ``` **应用发布后执行:** ```shell # 例如执行一些重启、清理缓存操作 ```
Docker 获取宿主机 IP 地址 作者: Chuwen 时间: 2021-09-12 分类: Docker 评论 网上查找,都没有找到相关的 这个域名得到的就是宿主机的 IP:`host.docker.internal` 所以怎么使用应该知道了吧 ``` [root@3905274ca2a3 /]# ping host.docker.internal PING host.docker.internal (192.168.65.2) 56(84) bytes of data. 64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=1 ttl=37 time=0.173 ms 64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=2 ttl=37 time=0.524 ms 64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=3 ttl=37 time=0.248 ms 64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=4 ttl=37 time=0.515 ms ^C --- host.docker.internal ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3039ms rtt min/avg/max/mdev = 0.173/0.365/0.524/0.156 ms ```