

WSL2 + Docker + Laradock 配置
source link: https://novnan.github.io/WSL/WSL2+Docker+Laradock/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

系统环境介绍
Win 10 2004
WSL2(Ubuntu 20.04)
Docker 19.03.13
启用 Linux 子系统
打开 控制面板 -> 程序 -> 启用或关闭Windows功能
。找到适用于Linux的Windows子系统
和虚拟机平台
,勾选这两项之后确定,并重新启动计算机。
切换系统 WSL 默认版本到 2
使用管理员用户打开 Windows PowerShell
,运行:
wsl --set-default-version 2
注意,有可能会出现如下提示:
WSL 2 需要更新其内核组件。有关信息,请访问 https://aka.ms/wsl2kernel
出现这个提示,说明需要更新 WSL2 的内核。按照提示打开链接。点击下图中的下载链接,下载并安装 WSL2 内核。
安装 Ubuntu 发行版
打开 Microsoft Store
,搜索 Ubuntu,界面如下所示:
根据自己的需要,选择对应的 Ubuntu 版本并安装。
完成之后在开始菜单会出现 Ubuntu 菜单项。打开它,Ubuntu 将会进行初始化操作。等待几分钟后按照提示,为 Ubuntu 设置用户名和密码。
最后,我们需要验证 Ubuntu 是否在 WSL2 的环境下启动。以管理员用户打开 Windows PowerShell
,执行:
wsl -l -v
如果看到如下信息:
NAME STATE VERSION
* Ubuntu-20.04 Running 2
说明 Ubuntu 在 WSL2 环境下运行。到此为止安装完毕。
如果发现 VERSION 为 1,说明 Ubuntu 运行在 WSL1 下。需要手工切换。
首先关闭 WSL下运行的 Linux,执行:
wsl --shutdown
然后执行:
wsl --set-version <Linux发行版名称> 2
这边就是输入 wsl --set-version Ubuntu-20.04 2
其中 Linux发行版名称
为前面安装的 Linux 名称,可以通过 wsl -l -v
命令查看。执行命令后等待片刻。等命令行提示转换完成,我们已经成功将 Linux 切换到 WSL2 环境。
systemctl 无法使用的问题
WSL2 经过测试无法使用 systemctl
命令,报如下错误:
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
参考了Running Snaps on WSL2 (Insiders only for now) 之后给出如下解决方案:
- 安装
daemonize
和fontconfig
apt update
apt install -y fontconfig daemonize
- 编辑
/etc/profile
脚本,加入如下内容:
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
if [ -z "$SYSTEMD_PID" ]; then
sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
fi
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi
- 修改
/etc/sudoers
文件,加入如下内容:
%sudo ALL=(ALL) NOPASSWD: /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
%sudo ALL=(ALL) NOPASSWD: /usr/bin/nsenter -t [0-9]* -a su - [a-zA-Z0-9]*
- 执行
source /etc/profile
或者是重新打开terminal
,执行systemctl
验证是否能够正常操作。
开启 ssh
- 卸载旧 ssh server
apt remove openssh-server
- 安装 ssh server
apt install openssh-server
- 修改 ssh server 配置
vim /etc/ssh/sshd_config
修改以下配置:
Port 22 #默认即可,如果有端口占用可以自己修改
PasswordAuthentication yes(允许用户名密码方式登录)
PermitRootLogin yes (允许root用户远程登录,有需要 root 登录就开起来)
sudo service ssh --full-restart
- 设置 ssh 开机自动启动
# 开机自动启动ssh命令
sudo systemctl enable ssh
# 关闭ssh开机自动启动命令
sudo systemctl disable ssh
# 单次开启ssh
sudo systemctl start ssh
# 单次关闭ssh
sudo systemctl stop ssh
# 设置好后重启系统
reboot
#查看ssh是否启动,看到Active: active (running)即表示成功
sudo systemctl status ssh
安装 Docker Desktop in Windows 10
官网:https://www.Docker.com/products/Docker-desktop
现在 Docker Desktop Windows
版已经能够支持 WSL 作为 Docker Engine 运行,可以同时支持在 Linux 和 Windows 命令行下操作 Docker。
- 确保 Ubuntu 内的 Docker 已经卸载,如果没有卸载,可以执行:
sudo apt remove docker-ce
sudo apt remove docker-ce-cli
注意:如果发现在 Ubuntu 内无法执行 docker
命令,可以通过如下操作打开:
进入 Docker Desktop 的 settings,如下所示:
保存下,即可在 Ubuntu 内直接使用 docker
命令。
迁移 WSL 到非系统盘
默认 WSL 总是安装到 C 盘,这样对于C盘空间紧张的用户完全不友好。
我们可以使用 LxRunOffline
工具来迁移WSL到其他磁盘分区。
LxRunOffline
的下载链接。在 Windows PowerShell 运行需要下载 LxRunOffline-vx.x.x-msvc.zip
版本。解压到任意目录即可使用。
LxRunOffline
是一个第三方 WSL Linux 发行版管理工具,可以认为是 WSL 命令的增强版。它可以安装和卸载 Linux 发行版,迁移,复制,导入导出和设置环境变量等。具体的使用帮助可执行.\LxRunOffline.exe \h
查看命令介绍。
迁移过程分为3步:
- 获取准备迁移的发行版名称。执行:
PS C:\Users\xxx\Desktop> .\LxRunOffline.exe list
Ubuntu-20.04
获取系统当前已安装的发行版。例子中返回的发行版名称为 Ubuntu-20.04
- 执行迁移命令。格式如下:
.\LxRunOffline.exe m -n <发行版名称> -d <目标路径>
比如我们要将 Ubuntu-20.04
移动到 D:\wsl\Ubuntu-20.04
(要确保 D:\wsl 目录存在),执行如下命令:
.\LxRunOffline.exe m -n Ubuntu-20.04 -d D:\wsl\Ubuntu-20.04
如果 Ubuntu 正在运行,需要先关闭在进行迁移,关闭命令:
PS C:\Users\xxx\Desktop> wsl --shutdown
# 启动命令为 wsl -d Ubuntu-20.04
等待命令执行完毕返回。
- 查看迁移后发行版的安装路径。执行:
PS C:\Users\xxx\Desktop> .\LxRunOffline.exe di -n Ubuntu-20.04
D:\wsl\Ubuntu-20.04
返回的安装位置是 D:\wsl\Ubuntu-20.04
,说明迁移成功。
文件系统相互访问
在 Win10 下访问 Linux 子系统文件
进入 CMD
或者 Windows PowerShell
,输入:
cd \\wsl$\Ubuntu-20.04\
可以进入到 Linux 子系统根目录。如下图所示:
或者打开文件资源管理器,在地址栏输入 \\wsl$\Ubuntu-20.04
,也可以跳转到 Linux 子系统根目录。
或者在 Linux 子系统中,输入:
explorer.exe .
会自动打开Linux 子系统目录。
Linux 子系统访问 Win10 文件
进入Linux子系统运行 df -h
,看到如下输出:
注意观察后两行。本人电脑有两个分区。/mnt/c
和 /mnt/d
正好分别对应本机的C盘和D盘。
Laradock
下载 Laradock,在 Ubuntu 里运行:
cd /www # 目录自己随意
git clone https://github.com/laradock/laradock.git
进入 ./laradock
目录,将 env-example
复制为 .env
cd laradock/
cp env-example .env
.env
文件中部分需要注意的变量
# 这个变量通常默认就行,最后此时的项目目录会映射到 workspace 容器的 `/var/www/` 目录中
APP_CODE_PATH_HOST=../
# 像mysql等需要volume的数据会存放在宿主机中的位置,如果有需要可以修改一下
DATA_PATH_HOST=~/.laradock/data
# php版本(7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6)
PHP_VERSION=7.4
### MYSQL #################################################
# mysql版本,默认是lastest,根据需要修改
MYSQL_VERSION=5.7
# 默认数据库名字
MYSQL_DATABASE=laravel
# 数据库用户名
MYSQL_USER=default
# 数据库用户密码
MYSQL_PASSWORD=secret
# 数据库端口
MYSQL_PORT=3306
# 数据库root用户的密码
MYSQL_ROOT_PASSWORD=root
# 更换中国镜像源,改为true
CHANGE_SOURCE=true
# 上面 `CHANGE_SOURCE` 改为`true`之后,就会更换为aliyun镜像源
UBUNTU_SOURCE=aliyun
### WORKSPACE #############################################
# 将comoser更换为阿里镜像源(更改为其他国内镜像源也可以,否则速度不稳定)
WORKSPACE_COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/
# 设置NVM安装node的淘宝镜像源
WORKSPACE_NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
# 设置node的淘宝的registry
WORKSPACE_NPM_REGISTRY=https://registry.npm.taobao.org/
# 时间改为PRC
WORKSPACE_TIMEZONE=PRC
如果不需要 node,可以将以下配置改为 false,上面的 node 淘宝镜像源就不需要配置了
WORKSPACE_INSTALL_NODE=false
WORKSPACE_INSTALL_YARN=false
WORKSPACE_INSTALL_NPM_GULP=false
WORKSPACE_INSTALL_NPM_BOWER=false
WORKSPACE_INSTALL_NPM_VUE_CLI=false
WORKSPACE_INSTALL_NPM_ANGULAR_CLI=false
构建并启动 Docker 容器
要在 ./laradock 目录下 执行命令
默认会启动 workspace
、php-fpm
和 composer
等,都会自动配置
docker-compose up -d nginx mysql
每次打 docker-compose
命令太长了,这边设置个 dc
别名:
vim ~/.bashrc
source ~/.bashrc
添加别名:alias dc='docker-compose'
保存退出,然后执行命令:source ~/.bashrc
构建完成后,进入 workspace,安装 Laravel 框架
# 进入workspace容器
$ dc exec workspace bash
# 在容器中执行composer命令将Laravel框架安装在 ./laravel 目录中
root@b0cf8f8333e4:/var/www# composer create-project --prefer-dist laravel/laravel laravel
配置 nginx 站点:./laradock/nginx/sites/
cp laravel.conf.example laravel.conf
修改 laravel.conf
配置:
重启 nginx 容器,使站点配置文件生效
dc restart nginx
或者
dc exec nginx nginx -s reload
在 Win10 hosts 文件 中加入对应的 ip 和域名,即可访问。
出现这个错误,说明目录没有权限,需要更改目录权限:
chown -R www-data:www-data /var/www/laravel
项目目录的 storage 文件夹没有写入权限。在项目目录执行 chmod -R 777 storage
Laravel 中数据库配置:./laravel/.env
laradock 的 mysql 容器不是以 ip 地址连接的,而是以 mysql 标签名连接的所以 ./laravel/.env 中关于 DB_HOST 的值不是 ip 地址,而是 mysql 这个单词
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root
关于 mysql 数据库管理工具
- 途径一:通过 phpmyadmin
workspace 占用着 8080 端口,所以需要修改 ./laradock/.env
中的端口
# 把phpmyadmin默认的8080改为不被占用的端口
PMA_PORT=8081
启动 phpmyadmin
dc up -d phpmyadmin
浏览器网址:localhost:8081
如果用户名:root,密码:root 并不能正常登录 phpmyadmin
这是 PHP7 和 MySQL8 的 authentication 方法不一致的问题,重新修改用户名密码即可:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
回到 phpmyadmin 中,使用 host: mysql, user: root, password: root 就可以正常登录了
- 途径二:通过 adminer
修改 ./laradock/.env
中的端口
# 把adminer默认的8080改为不被占用的端口
ADM_PORT=8082
启动 adminer
dc up -d adminer
浏览器网址:localhost:8082
- 途径三:通过宿主机数据库管理工具管理
修改 ./laradock/.env
中 mysql 客户端端口号
MYSQL_PORT=3308
至此,基本的配置和安装都结束了。
WSL2 的一些网络访问问题
参考此链接
Recommend
-
12
最近几天一直想找个方法把VMware虚拟机和远程连接工具MobaXterm这一组配合替换掉,因为每次开启虚拟机操作Ubuntu都需要占用很大的内存,而且要等好久好久才能开启!!!后面还要使用MobaXterm或者Xshell在远程连接进行操作总觉得好麻烦,这两天发...
-
16
wsl2配置zsh步骤 sudo apt update sudo apt upgrade 检查zsh是否安装 cat /etc/shells 如果没有安装的话 sudo apt install zsh 下载oh-my-zsh 国内...
-
2
配置本地的 Laradock 环境(开发环境)克隆 laradock 源代码到本地环境在运行前需要安装docker环境git clone https://github.com/laradock/laradock.git创建 .env 文件cp env-example-local .env
-
7
title: WSL2 安装及配置toc_level: 3date: 2021-07-23 17:43:01tags: [WSL, Linux, Config]categories: [Uncategorized]version: v1
-
7
V2EX › Windows WSL2 作为 FRP 客户端如何配置 urhosts · 23 小时 16 分钟前 · 780 次点击...
-
6
MrLeiDeSen's Blog WSL2 配置代理2022-02-07 17:33:30 · MrLeiDeSen准备#C...
-
5
为什么要使用Docker Docker能极大地减少环境配置和环境差异带来的工作,能相当程度提高生产力.以往我们使用的Homestead等虚拟机只能实现开发环境的共享,并不能用到生产环境中,无法减少运维的工作. 什么是Docker? Docker 是个划时代...
-
3
Docker Debian 镜像源替换 因多数默认的 Docker 镜像为国外的,而采用的镜像源也是国外的,故访问很慢,所以我们需要替换为国内的(比如阿里云或163等)。 注意: 不同版本的 Debian 镜像源地址不一样
-
5
WSL2 安装、配置 Cuda、pytorch 记录本文地址:blog.lucien.ink/archives/532最近整了张矿卡,为了这碟醋,包了盘饺子。虽然我已经预料到买前深度学习,买...
-
8
wsl2 配置服务自启动 – 梦回故里 梦回故里 梦回故里是一个php程 梦回故里 无产阶级在这个革命中失去的...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK